16

Ich spiele mit der Design-Support-Bibliothek TabLayout herum. Mein Problem ist, dass der Titel einer der Registerkarten zu lang ist und daher auf 2 Zeilen statt 1 gezeichnet wird. Ich frage mich, ob es eine Möglichkeit gibt, die Titeltextgröße zu skalieren, um sicherzustellen, dass alle Titel in 1 Zeile gezeichnet werden .Design-Unterstützung TabLayout

Hier ist ein Screenshot besser mein Problem zu erklären: enter image description here

Falls die Details wichtig sind, ich bin mit Design Support TabLayout, ein ViewPager und FragmentPagerAdapter meine Tabs zu füllen.

Vielen Dank im Voraus!

+1

Wenn Sie in TabLayout sehen, gibt es eine Konstante private statische final int MAX_TAB_TEXT_LINES = 2; und in TabView (LinearLayout) gibt es eine Textansicht, bei der max-Zeilen auf textView.setMaxLines (MAX_TAB_TEXT_LINES) gesetzt sind;
So können Sie Ihre benutzerdefinierte Ansicht der Registerkarte zur Verfügung stellen, die auf die maximale Zeile 1 eingestellt ist und am Ende eine Ellipsengröße aufweist. dh tabLayout.addTab (tabLayout.newTab(). setCustomView (View v) –

+0

@Adam Haben Sie die Lösung ?? – Akshay

Antwort

10

Sie können in styles.xml Schriftgröße oder eine andere params von tabLayout ändern. Zum Beispiel:

<style name="Base.Widget.Design.TabLayout" parent="android:Widget"> 
     <item name="tabMaxWidth">@dimen/tab_max_width</item> 
     <item name="tabIndicatorColor">?attr/colorAccent</item> 
     <item name="tabIndicatorHeight">2dp</item> 
     <item name="tabPaddingStart">12dp</item> 
     <item name="tabPaddingEnd">12dp</item> 
     <item name="tabBackground">?attr/selectableItemBackground</item> 
     <item name="tabTextAppearance">@style/AppTheme.TextAppearance.Design.Tab</item> 
     <item name="tabSelectedTextColor">?android:textColorPrimary</item> 
    </style> 

    <style name="AppTheme.TextAppearance.Design.Tab" parent="TextAppearance.AppCompat.Button"> 
     <item name="android:textSize">12sp</item> 
     <item name="android:textColor">?android:textColorSecondary</item> 
     <item name="textAllCaps">true</item> 
    </style> 
+0

Danke für die Antwort Dmitriy, dies wirft etwas Licht auf mein Problem. Die Änderung der Textgröße wird mein unmittelbares Problem beheben, aber ich frage mich, ob dies das Problem für alle Geräte behebt. Ich möchte sicherstellen, dass Tabs auf Geräten aller Größen und Auflösungen nur eine Zeile benötigen. Weißt du, ob es eine Möglichkeit gibt, das Tab-Layout auf den Inhalt des Tabs in einer Zeile anzupassen? – Adam

+0

Ich weiß nicht über SingleLine wie Parameter von TextView, aber Sie können Unterstützung für verschiedene Geräte hinzufügen. Für textSize können Sie Werte aus dimen.xml-Dateien verschiedener Layouts schreiben. Watch this http://developer.android.com/intl/ru/guide/topics/resources/more-resources.html#Dimension –

21

haben Sie gesetzt:

<android.support.design.widget.TabLayout 
    .. 
    app:tabMode="scrollable" /> 
+0

Einstellung es auf scrollbare setzt es auf eine Zeile, aber jetzt sind die Tabs nicht gleichmäßig verteilt. Irgendwelche Vorschläge, wie fix das? – Adam

+1

Hallo Adam, die tatsächliche Lösung für Ihre Frage ist oben von Dmitriy Chernov - aber die Änderung der Textgröße folgt nicht Materialrichtlinien - https://www.google.com/design/spec/components/tabs.html # tabs-usage sieht speziell unter dem Untertitel-Inhalt aus.Es wird entweder in zwei Zeilen umbrochen, oder als scrollbare Tabs (wie vorgeschlagen) - die Antwort, die ich gegeben habe, folgt den Richtlinien und hält den Tab-Text in einer Zeile. app: tabMinWidth = "dp value" in der TabLayout XML und spiele mit einem dp-wert, der zu deinem größten tab-text passt –

+0

genau das, was ich gesucht habe, danke! – Roman

0

Update-Design Support-Bibliothek zu 23.1.0. Sie haben dieses Problem behoben, aber Ihre Textgröße ändert sich auch

+0

Textgröße über Code funktioniert nicht in 23.1.0, aber Sie können es über styles.xml wie Dmitriy Chernov getan haben – JeremyDay