Własny krój pisma w tytule zakładki ActionBar

Próbuję ustawić niestandardowy krój pisma na moimActionBar tytuły kart.

Widziałem więcej programistów pytających o właściwy sposób, aby to zrobić na SO (np.Jak dostosować czcionkę na kartach paska akcji & W jaki sposób (jeśli to możliwe) mogę ustawić niestandardową czcionkę w pasku akcji na karcie z czcionką w folderze zasobów?) ale bez odpowiedzi.

Do tej pory zastosowałem dwa podejścia:

1) Pierwszy byłnatchniony przez toTak pytanie i polega na nadmuchaniu niestandardowego układu dla każdej karty:

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);

To nie wygląda na bardzo dobre podejście, ponieważ jeśli tabulacje + akcje nie pasują do ActionBar w trybie poziomym, tytuły kart są wyświetlane na liście przepełnienia (Spinner / rozwijane), ale wybrana wartość pojawia się jako pusty. A gdy klikniesz element tej listy, wszystkie te widoki znikną. Jest to szczególnie denerwujące, gdy na przykład użytkownik rozszerza widok akcji wyszukiwania, co powoduje, że android pokazuje kartę jako rozwijaną.

2) Próbowałem innego podejścia, jak przedstawionotutaj co wymaga użyciaSpannableString ale czcionka nie zmienia się w moją niestandardową.

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));

Widać klasę TypefaceSpantutaj.

Więc...

Czy ktoś zna właściwy sposób stylizacjiActionBar tytuły kart z krojem z „/ assets / fonts / ...”? Każda pomoc byłaby bardzo mile widziana.

EDYTOWAĆ:

Więcej na temat drugiego podejścia. Klasa TypefaceSpan, której używam, jest w rzeczywistości widelcemandroid.text.style.TypefaceSpan przedstawione przez użytkownika @twaddington tutaj:Jak ustawić niestandardową czcionkę w tytule ActionBar?

EDYCJA 2:

W poprzednim linku podano komentarz:„Jeśli atrybut textAllCaps jest ustawiony na true na podstawowym TextView (np. za pośrednictwem motywu), to niestandardowa czcionka nie pojawi się. To był problem dla mnie, gdy zastosowałem tę technikę do elementów karty paska akcji”.

Zmieniłem mój styl, aby textAllCaps ustawiono na false, a teraz druga metoda wydaje się działać. Przetestuję to trochę i opublikuję wyniki.

Wniosek:

Rozwiązanie w poprzedniej edycji wydaje się działać.

Oznaczenie odpowiedzi @ CommonsWare jako poprawnej dla jej trafności.

PS-EDIT dla @PeteH:

Zapytałem o to 6 miesięcy temu, więc nie pamiętam wszystkich szczegółów. Wierzę, że w tej aplikacji zastosowałem inne podejście do nawigacji. Wszystko, co mogę teraz znaleźć w aplikacji (dotyczące przesuwania ...) toActivity którego układ zawieraViewPager zPagerTabStrip, który tak stylizowałem:

// 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);
    }
}

Nie jest to jednak to samo, co problem przedstawiony w tym pytaniu.

Jedynym powiązanym kodem, który mogę znaleźć, jest ten, w którym ustawiłemSpannableString:

// 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));
}

... podczas gdy w moim style.xml miałem styl tekstu karty w pasku akcji:

<!-- action bar tabtext style -->
<style name="ActionBarTabText.MyApplication" parent="@android:style/Widget.Holo.ActionBar.TabText">
    <item name="android:textAppearance">@android:style/TextAppearance.Holo.Medium</item>
    <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
    <item name="android:textSize">15sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:ellipsize">marquee</item>
    <item name="android:maxLines">1</item>
</style>

questionAnswers(2)

yourAnswerToTheQuestion