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?
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?
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
und android:textAllCaps
auf false
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>
textAllCaps
während die Frage verwendet wird android:textAllCaps
.
android:textAllCaps
android:textAllCaps
und textAllCaps
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"
.../>
https://stackoverflow.com/a/34678235/1025379
<android.support.design.widget.TabLayout
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
/>
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" />
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"
und android: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"
/>
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.
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);
}
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>
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.
Veränderung: <item name="android:textAllCaps">false</item>
Mit: <item name="textAllCaps">false</item>
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.
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.