Пользовательский шрифт в заголовке вкладки 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

Ответы на вопрос(2)

Ваш ответ на вопрос