Benutzerdefinierte Schriftart im Titel der ActionBar-Registerkarte

Ich versuche, eine benutzerdefinierte Schriftart für meine festzulegenActionBar Tabulatortitel.

Ich habe mehr Entwickler gesehen, die nach einem geeigneten Weg fragten, dies auf SO zu tun (z.So passen Sie die Schriftart der Aktionsleisten-Registerkarten an & Wie kann ich (wenn möglich) eine benutzerdefinierte Schriftart in einer Aktionsleiste auf einer Registerkarte mit einer Schriftart in meinem Assets-Ordner festlegen?) aber keine Antworten.

Bisher habe ich zwei Ansätze verfolgt:

1) Der erste warinspiriert dadurchSO Frage und besteht aus dem Aufblasen eines benutzerdefinierten Layouts für jede Registerkarte:

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

Dies scheint kein sehr guter Ansatz zu sein, da, wenn die Registerkarten + Aktionen im Querformat nicht zur Aktionsleiste passen, die Registerkartentitel in einer Überlaufliste (Drehfeld / Dropdown) angezeigt werden, der ausgewählte Wert jedoch als angezeigt wird leeren. Wenn Sie auf das Element dieser Liste klicken, werden alle diese Ansichten ausgeblendet. Dies ist besonders ärgerlich, wenn der Benutzer beispielsweise eine Suchaktionsansicht erweitert, wodurch Android die Registerkarte als Dropdown-Liste anzeigt.

2) Ich habe einen anderen Ansatz als dargestellt versuchtHier das beinhaltet die Verwendung einesSpannableString aber die Schriftart ändert sich nicht zu meiner benutzerdefinierten.

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

Klasse TypefaceSpan ist zu sehenHier.

So...

Kennt jemand eine richtige Art des Stylings derActionBar Tabulatortitel mit einer Schriftart aus "/ assets / fonts / ..."? Jede Hilfe wäre sehr dankbar.

BEARBEITEN:

Mehr zum zweiten Ansatz. Die TypefaceSpan-Klasse, die ich verwende, ist eigentlich eine Abzweigung vonandroid.text.style.TypefaceSpan wie vom Benutzer @twaddington hier dargestellt:Festlegen einer benutzerdefinierten Schriftart im ActionBar-Titel

EDIT 2:

Im vorherigen Link stand in einem Kommentar:"Wenn das textAllCaps-Attribut in der zugrunde liegenden Textansicht auf" true "gesetzt ist (z. B. über ein Design), wird die benutzerdefinierte Schriftart nicht angezeigt. Dies war ein Problem für mich, als ich diese Technik auf die Elemente der Aktionsleistenregisterkarte anwendete.".

Ich habe meinen Stil geändert, sodass textAllCaps auf false gesetzt wurde und jetzt die zweite Methode zu funktionieren scheint. Ich werde es ein wenig testen und die Ergebnisse veröffentlichen.

Fazit:

Die Lösung in der vorherigen Bearbeitung scheint zu funktionieren.

Markiere die Antwort von @ CommonsWare als richtig für ihre Relevanz.

PS-EDIT für @PeteH:

Ich habe das vor 6 Monaten gefragt, deshalb kann ich mich nicht an alle Details erinnern. Ich glaube, dass ich für diese App einen anderen Ansatz für die Navigation gewählt habe. Alles, was ich jetzt in der App finden kann (bezüglich Swiping ...), ist einActivity deren layout enthält aViewPager mit einerPagerTabStrip, die ich so gestylt habe:

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

Dies ist jedoch nicht das gleiche Problem wie in dieser Frage.

Der einzige zugehörige Code, den ich finden kann, ist dieser, in dem ich ein setzeSpannableString:

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

... während ich in meiner styles.xml den Stil für den Tab-Text der Actionbar hatte:

<!-- 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>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage