Пользовательский шрифт в заголовке вкладки ActionBar
я пытаюсь установить пользовательский шрифт на моемActionBar
вкладки названия.
Я видел, как другие разработчики просили правильный способ сделать это на SO (например,Как настроить шрифт вкладок панели действий & Как (если возможно) я могу установить собственный шрифт в панели ActionBar для текста вкладки со шрифтом в папке с активами?) но ответов нет.
Пока что яМы придерживались двух подходов:
1) Первый былвдохновенный этимТАК вопрос и состоит из раздувания пользовательского макета для каждой вкладки:
LayoutInflater inflater = LayoutInflater.from(this);
View customView = inflater.inflate(R.layout.tab_title, null); // a custom layout for the tab title, basically contains a textview...
TextView titleTV = (TextView) customView.findViewById(R.id.action_custom_title);
titleTV.setText(mSectionsPagerAdapter.getPageTitle(i));
titleTV.setGravity(Gravity.CENTER_VERTICAL);
titleTV.setTypeface(((MyApp) getApplicationContext()).getCustomTypeface());
// ...Here I could also add any other styling I wanted to...
actionBar.getTabAt(i).setCustomView(customView);
Это неэто не очень хороший подход, потому что если вкладки + действия неt вписывается в ActionBar в альбомном режиме, заголовки вкладок отображаются в списке переполнения (Spinner / Drop-down), но выбранное значение отображается как пустое. И когда вы нажимаете на этот списокПосле этого все эти виды исчезнут. Это особенно раздражает, когда, например, пользователь расширяет представление действия поиска, в результате чего Android отображает вкладку как раскрывающийся список.
2) ямы попробовали другой подход, как представленоВот который включает в себя использованиеSpannableString
но шрифт нене могу изменить свой.
SpannableString s = new SpannableString(mSectionsPagerAdapter.getPageTitle(i));
s.setSpan(new TypefaceSpan(this, "FontName.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actionBar.addTab(actionBar.newTab().setText(s).setTabListener(this));
Класс TypefaceSpan можно увидетьВот.
Так...
Кто-нибудь знает правильный способ укладкиActionBar
вкладки названия с гарнитурой из "/ Активы / шрифты / ...»? Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ:
Подробнее о втором подходе. Класс TypefaceSpan I 'м на самом деле является вилкойandroid.text.style.TypefaceSpan как представлено пользователем @twaddington здесь:Как установить пользовательский шрифт в заголовке ActionBar?
РЕДАКТИРОВАТЬ 2:
В предыдущей ссылке комментарий гласил: «если для атрибута textAllCaps установлено значение true в базовом TextView (например, через тему), то пользовательский шрифт выиграл 'т появляются. Это было проблемой для меня, когда я применил эту технику к элементам панели действий ».
Я изменил свой стиль так, чтобы textAllCaps был установлен в false, и теперь второй метод, кажется, работает. Я'Немного опробую и опубликую результаты.
Заключение:
Решение в предыдущем редактировании, кажется, работает.
Маркировка @CommonsWare 'ответ как правильный для его актуальности.
PS-РЕДАКТИРОВАТЬ для @PeteH:
Я спросил это 6 месяцев назад, поэтому я нене помню все детали. Я считаю, что в этом приложении я придерживался другого подхода к навигации. Все, что я могу теперь найти в приложении (касательно считывания ...), этоActivity
чей макет содержитViewPager
сPagerTabStrip
, который я назвал так:
// Style the Tab Strip:
Typeface tf = ((MyApplication) getApplication()).getTabStripTypeface(); // Used this to keep a single instance of the typeface (singleton pattern) and avoid mem. leaks
PagerTabStrip strip = (PagerTabStrip) findViewById(R.id.pager_title_strip);
strip.setTabIndicatorColor(getResources().getColor(R.color.myColor));
strip.setDrawFullUnderline(true);
for (int i = 0; i < strip.getChildCount(); ++i) {
View nextChild = strip.getChildAt(i);
if (nextChild instanceof TextView) {
TextView textViewToConvert = (TextView) nextChild;
textViewToConvert.setAllCaps(false);
textViewToConvert.setTypeface(tf);
}
}
Это не то же самое, что проблема, представленная в этом вопросе.
Единственный связанный код, который я могу найти, это то, где я установил:SpannableString
// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
SpannableString s = new SpannableString(mSectionsPagerAdapter.getPageTitle(i));
s.setSpan(new TypefaceSpan(this, "FontName.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actionBar.addTab(actionBar.newTab().setText(s).setTabListener(this));
}
... тогда как в моем файле styles.xml у меня был стиль для панели действий 'Текст вкладки, как это:
@android:style/TextAppearance.Holo.Medium
?android:attr/textColorPrimaryInverse
15sp
bold
false
marquee
1