Ich versuche an dem neuen zu arbeiten TabLayout
aus der Android Design Library zu arbeiten.
Ich möchte den Tabulatortext in eine benutzerdefinierte Schriftart ändern . Und ich habe versucht, nach Styling zu suchen, bin TabLayout
aber dazu gekommen .
Bitte geben Sie an, wie ich die Schriftarten auf der Registerkarte ändern kann.
Antworten:
Erstellen Sie eine Textansicht aus Java Code oder XML wie folgt
Stellen Sie sicher, dass die ID unverändert bleibt, da das TabLayout nach dieser ID sucht, wenn Sie eine benutzerdefinierte Textansicht verwenden
Typeface
Blasen Sie dann dieses Layout aus dem Code auf, legen Sie die benutzerdefinierte Ansicht für diese Textansicht fest und fügen Sie diese benutzerdefinierte Ansicht der Registerkarte hinzuquelle
tabTextColor
undtabSelectedTextColor
Eigentum?Wenn Sie verwenden
TabLayout
und die Schriftart ändern möchten, müssen Sie der vorherigen Lösung wie folgt eine neue for-Schleife hinzufügen:Weitere Informationen finden Sie unter Ändern des Schriftstils in den Registerkarten der Aktionsleiste mithilfe von Sherlock
quelle
TabLayout
setTypeFace
ist aTypeFace
, falls Sie dieFont
Klasse nicht finden können (die für mich nicht zu existieren scheint)Erstellen Sie Ihren eigenen benutzerdefinierten Stil und verwenden Sie den übergeordneten Stil als
parent="@android:style/TextAppearance.Widget.TabWidget"
Verwenden Sie diesen Stil in Ihrem Registerkartenlayout als
app:tabTextAppearance="@style/tab_text"
Beispiel: Stil:
Beispiel: Tab-Layout-Komponente:
quelle
parent="TextAppearance.Design.Tab"
in meinem Fall.TextAppearance.Widget.TabWidget
. @Javatars Antwort hat es für mich behoben.Tolle Antwort von Praveen Sharma. Nur eine kleine Ergänzung: Anstatt
changeTabsFont()
überall zu verwendenTabLayout
, können Sie einfach Ihre eigenen verwendenCustomTabLayout
.Und noch etwas.
TabView
ist einLinearLayout
withTextView
inside (kann optional auch enthaltenImageView
). So können Sie den Code noch einfacher gestalten:Aber ich würde diesen Weg nicht empfehlen. Wenn
TabLayout
Implementierung ändert, kann dieser Code nicht ordnungsgemäß funktionieren oder sogar abstürzen.Eine andere Möglichkeit zum Anpassen
TabLayout
ist das Hinzufügen einer benutzerdefinierten Ansicht. Hier ist das gute Beispiel .quelle
addTab(Tab tab, int position, boolean setSelected)
stattaddTab(Tab tab)
.Verwenden Sie die Support Library 26+, um die Schriftartenunterstützung in
XML
Funktionen auf Geräten zu verwenden, die ausgeführt werdenAndroid 4.1
(API-Stufe 16) und höher.myfont.ttf
Datei in einem neu erstellten Schriftartenordner abAuf
res/values/styles.xml
add:Fügen Sie in der Layoutdatei die App hinzu: tabTextAppearance = "@ style / customfontstyle",
Weitere Informationen finden Sie unter [Schriftarten in XML]. ( Https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml )
quelle
Die folgende Methode ändert die Schriftart vollständig
ViewGroup
rekursiv. Ich habe diese Methode gewählt, weil Sie sich nicht um die innere Struktur von kümmern müssenTabLayout
. Ich verwende die Kalligraphiebibliothek , um eine Schriftart festzulegen.quelle
Für die Designunterstützung 23.2.0 müssen Sie mit setupWithViewPager den Code von addTab (Registerkarte Tab) nach addTab (Registerkarte Tab, boolean setSelected) verschieben.
quelle
Sie können dies verwenden, es funktioniert für mich.
quelle
Nun, ich fand es einfach in 23.4.0 ohne Verwendung einer Schleife. Überschreiben Sie einfach addTab (Registerkarte @NonNull Tab, boolean setSelected), wie von @ejw vorgeschlagen.
Und hier ist das XML
Hoffe es könnte helfen :)
quelle
android:textColor="@color/graylove"
sollte die Statuslistenauswahl für die mit state_selected Farbe angegeben habenWie Andrei antwortete, können Sie die Schriftart ändern, indem Sie die TabLayout- Klasse erweitern. Und wie Penzzz sagte, können Sie dies nicht mit der addTab- Methode tun . Außer Kraft setzen onLayout- Verfahren wie unten:
OnLayout-Methode muss überschrieben werden, da bei Verwendung von setupWithViewPager Methode zum Binden des TabLayout mit dem ViewPager den Tabulatortext entweder mit der setText-Methode oder danach im PagerAdapter festlegen müssen. In diesem Fall wird die onLayout-Methode in der übergeordneten ViewGroup aufgerufen ( TabLayout) und hier können Sie die Schriftart für die Einstellung einfügen. (Wenn Sie einen TextView-Text ändern, wird die onLayout-Methode des übergeordneten Elements aufgerufen. Ein tabView hat zwei untergeordnete Elemente, eines ist ImageView, ein anderes ist TextView.)
Eine andere Lösung:
Erstens diese Codezeilen:
In der obigen Lösung sollte außerhalb von zwei Schleifen geschrieben werden.
Eine bessere Lösung für API> = 16 ist die Verwendung von android: fontFamily :
Erstellen Sie ein Android-Ressourcenverzeichnis mit dem Namen font und kopieren Sie die gewünschte Schriftart in das Verzeichnis.
Verwenden Sie dann diese Stile:
quelle
onLayout()
die bei jeder Layoutänderung wie dem Wechseln von Registerkarten oder sogar dem Scrollen von Listen unter den Registerkarten aufgerufen wurde. Verschachteltefor
s in einerTabLayout
App mit vielen Registerkarten sind verzögert.onLayout()
wird beim Tab-Wechsel mehrmals aufgerufen (nicht sicher warum genau), aber um dies zu berücksichtigen, setze ich die Schriftarten nur, wenn dasboolean changed
wahr ist. Dadurch wird verhindert, dass die Schriftarten mehrmals festgelegt werden.Meine Auflösungsmethode ändert einfach den angegebenen Tabulatortext.
quelle
quelle
Kotlin-Erweiterung, die für mich funktioniert hat:
quelle
Mein 2p, Kotlin mit Referenzprüfung, überall anwendbar, da es aufhört, wenn etwas nicht stimmt.
quelle
Und hier ist meine Implementierung in Kotlin, die auch das Ändern der Schriftart für ausgewählte und nicht ausgewählte Registerkarten ermöglicht.
in attrs.xml:
quelle
Verwenden Sie bei Kotlin-Erweiterungsfunktionen Folgendes:
}}
quelle
Veränderung
if (tabViewChild instanceof TextView) {
zum
damit es mit android.support.design.widget.TabLayout funktioniert (zumindest von com.android.support:design:23.2.0)
quelle