Ich habe android:textAllCaps="false"
in meinem android.support.design.widget.TabLayout
Gedanken festgelegt, dass der Tab-Titel nur in Großbuchstaben angezeigt wird.
Wie kann ich alle Kappen entfernen?
android
androiddesignsupport
android-tablayout
dhuma1981
quelle
quelle
Antworten:
UPDATE FÜR DESIGN LIBRARY 23.2.0+
Die ursprüngliche Antwort funktioniert nicht mit der Designbibliothek 23.2.0 oder höher. Vielen Dank für @ fahmad6, auf das im Kommentar hingewiesen wurde. Falls jemand diesen Kommentar verpasst hat, werde ich ihn hier einfügen. Sie müssen beide setzen
textAllCaps
undandroid:textAllCaps
auffalse
alle Einstellungen nutzen zu deaktivieren.<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> <item name="textAllCaps">false</item> <item name="android:textAllCaps">false</item> </style>
URSPRÜNGLICHE ANTWORT
Standardmäßig werden Registerkarten von TabLayout erstellt. Die Eigenschaft textAllCaps wird auf true gesetzt. Sie müssen einen Stil definieren, der dieses Flag auf false setzt.
<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> <item name="tabTextAppearance">@style/MyCustomTextAppearance</item> </style> <style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> <item name="textAllCaps">false</item> </style>
quelle
textAllCaps
während die Frage verwendet wirdandroid:textAllCaps
.android:textAllCaps
android:textAllCaps
undtextAllCaps
auf false setzen, damit mein Text wie gewünscht angezeigt wird (dh "Lokal" anstelle von "LOKAL"). Entweder alleine zu versuchen, hat den Trick nicht getan.Die Antwort von @Paresh Mayani ist korrekt, Sie können jedoch nur einen Tabulatorstil erstellen
<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> <item name="textAllCaps">false</item> </style>
Und benutze es mit
<android.support.design.widget.TabLayout app:tabTextAppearance="@style/MyCustomTextAppearance" .../>
quelle
https://stackoverflow.com/a/34678235/1025379
<android.support.design.widget.TabLayout app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget" />
quelle
android.support.design.widget.TabLayout
.com.google.android.material.tabs.TabLayout
Verwenden Sie dieses Attribut.
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
Es wird funktionieren.<android.support.design.widget.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" app:tabGravity="fill" app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget" app:tabIndicatorColor="@color/colorPrimary" app:tabMode="fixed" app:tabPaddingStart="0dp" />
quelle
In meinem Fall funktionieren zwei Varianten:
1) Von Bogdan (susemi99):
<android.support.design.widget.TabLayout app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget" />
2) Von Paresh Mayani. Ich wollte
android:textAllCaps="false"
undandroid:textSize="15sp"
gleichzeitig, so funktioniert seine alte Methode.Beim
styles.xml
Schreiben (Eltern können variieren, z. B. "@android: style / TextAppearance.Widget.TabWidget", "TextAppearance.Design.Tab"):<style name="TabLayout" parent="Widget.Design.TabLayout"> <item name="tabIndicatorColor">@color/color_blue</item> <item name="tabSelectedTextColor">@color/color_blue</item> <item name="tabTextColor">@color/black</item> <item name="tabTextAppearance">@style/TabLayoutTextAppearance</item> </style> <style name="TabLayoutTextAppearance" parent="TextAppearance.Design.Tab"> <item name="android:textSize">15sp</item> <item name="textAllCaps">false</item> <item name="android:textAllCaps">false</item> </style>
Wenden Sie diesen Stil im Layout an:
<android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/TabLayout" />
quelle
Für diejenigen , die keine anderen Antworten finden können .
Das Definieren eines Stils funktioniert einwandfrei, wenn Sie einzeiligen Tabulatortext haben. Wenn Sie sich das TabLayout genauer ansehen, werden Sie feststellen, dass es ein Feld design_tab_text_size_2line verwendet, wenn die Registerkarten mehr als eine Zeile enthalten.
Die einzige Möglichkeit, dieses Feld zu beeinflussen, besteht darin, es in Ihrer Dimen-Datei zu überschreiben.
Fügen Sie dies also in Ihre Werte / dimensions.xml ein
<dimen name="design_tab_text_size_2line" tools:override="true">10sp</dimen>
Ich hoffe es hilft.
quelle
Hier ist eine einfache Lösung ... Viel Spaß
for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) { TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1)); tabTextView.setAllCaps(false); }
quelle
In Versionen vor 14 müssen Sie Folgendes festlegen (wie von Paresh Mayani kommentiert):
<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> <item name="tabTextAppearance">@style/MyCustomTextAppearance</item> </style> <style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> <item name="textAllCaps">false</item> </style>
Aber wenn die Android-Version gleich oder größer als 14 ist, müssen Sie Folgendes einstellen:
<item name="android:textAllCaps">false</item>
Wenn Sie also mit Versionen vor und nach 14 kompatibel sein müssen, müssen Sie auch einen Ordner values-v14 und eine Datei styles.xml in diesem Ordner mit dem folgenden Inhalt erstellen:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> <item name="android:textAllCaps">false</item> </style> </resources>
quelle
Versuchen Sie die folgende Methode und Sie können alle Methoden von
TextView
in implementierenTabLayout
private void setCustomTab() { ViewGroup vg = (ViewGroup) mTabLayout.getChildAt(0); int tabsCount = vg.getChildCount(); for (int j = 0; j < tabsCount; j++) { ViewGroup vgTab = (ViewGroup) vg.getChildAt(j); int tabChildsCount = vgTab.getChildCount(); for (int i = 0; i < tabChildsCount; i++) { View tabViewChild = vgTab.getChildAt(i); if (tabViewChild instanceof TextView) { ((TextView) tabViewChild).setTypeface(ResourcesCompat.getFont(this,R.font.montserrat_medium)); ((TextView) tabViewChild).setAllCaps(false); } } } }
Ich hoffe es hilft.
quelle
Veränderung:
<item name="android:textAllCaps">false</item>
Mit:
<item name="textAllCaps">false</item>
quelle
Das hat bei mir funktioniert ...
<style name="TabLayoutStyle" parent="Widget.Design.TabLayout"> <item name="tabTextAppearance">@style/TabTextAppearance</item> </style> <style name="TabTextAppearance" parent="TextAppearance.Design.Tab"> <item name="textAllCaps">false</item> </style>
quelle
Sie können dies auch in Ihrem Java-Code tun. Wenn Sie ein SlidingTabLayout verwenden, sehen Sie sich dieses Beispiel an:
protected TextView createDefaultTabView(Context context){ TextView textView = new TextView(context); textView.setGravity(Gravity.CENTER); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);//see line 38 above change the value their in TAB_VIEW_TEXT_SIZE_SP. textView.setTypeface(Typeface.DEFAULT);//From DEFAULT_BOLD textView.setTextColor(Color.parseColor("#536DFE"));//Text color of the words in the tabs. Indigo A200 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ // If we're running on Honeycomb or newer, then we can use the Theme's // selectableItemBackground to ensure that the View has a pressed state TypedValue outValue = new TypedValue(); getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true); textView.setBackgroundResource(outValue.resourceId); } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){ // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style textView.setAllCaps(true); } int padding = (int)(TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); textView.setPadding(padding, padding, padding, padding); return textView; }
Beachten Sie, dass textView.setAllCaps () als Perimeter true hat :
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){ // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style textView.setAllCaps(true); }
Als ich dies in (falsch) änderte, löste es das Problem für mich:
textView.setAllCaps(false);
Auch meine String-Ressourcendatei, die ich für die Registerkarten verwende, sieht folgendermaßen aus:
<string name="tab_title">Title with capital and smaller case</string>
Wenn es jedoch alle Großbuchstaben wie> TITEL MIT ALLEN GROSSBUCHSTABEN <hätte, würden Sie natürlich immer noch alle Großbuchstaben in Ihren Registerkarten haben.
Ich habe keine weiteren Änderungen vorgenommen.
Es ist bemerkenswert, dass Sie auch textView.setAllCaps (false) festlegen können, aber dies hat in meinem Fall keinen Unterschied gemacht. Ich habe gerade textView.setAllCaps (true) auskommentiert.
quelle
Fügen Sie dies einfach Ihrer benutzerdefinierten Stildatei hinzu
<item name="android:textStyle">normal</item>
Ich habe alle oben genannten Lösungen gelesen und alle führen dazu.
quelle