2015-07-08 3 views
38

Ich habe android:textAllCaps="false" in meinem android.support.design.widget.TabLayout gedacht, es zeigt den Tab-Titel nur in Großbuchstaben.android: textAllCaps = "false" funktioniert nicht für TabLayout-Design Unterstützung

Wie kann ich alle Kappen entfernen?

+0

Ich glaube, dass Sie das in einem bestimmten Stil definieren müssen, der den Basisstil für ein TabLayout erbt. – Vannen

+0

@Vannen kann mir bitte einen Code zeigen, der dieses Problem löst? – dhuma1981

+0

verwenden Sie bitte editText.setFilters (new InputFilter [] {new InputFilter.AllCaps()}); –

Antwort

95

UPDATE FÜR DESIGN BIBLIOTHEK 23.2.0+

Die ursprüngliche Antwort funktioniert nicht mit Design-Bibliothek 23.2.0 oder höher. Danke für @ fahmad6 im Kommentar darauf hingewiesen, falls jemand diesen Kommentar verpasst hat, werde ich es hier einfügen. Sie müssen sowohl textAllCaps als auch android:textAllCaps auf false setzen, um alle Großbuchstaben zu deaktivieren.

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> 
     <item name="textAllCaps">false</item> 
     <item name="android:textAllCaps">false</item> 
</style> 

ORIGINAL ANTWORT

standardmäßig Registerkarten erstellt werden durch TabLayout die textAllCaps Eigenschaft legt um wahr zu sein, müssen Sie einen Stil definieren machen dieses Flag falsch.

<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> 
+3

Ihre Antwort sieht korrekt aus, aber ich weiß nicht warum, es hat nicht funktioniert – Moinkhan

+0

@Moinkhan Ich kann nichts sagen, ohne zu wissen, was Sie im Layout gemacht haben und welchen Code Sie geschrieben haben! Schauen Sie in den Code und sehen Sie, ob ein Fehler vorliegt! –

+0

Ich verwende gerade das Thema 'MyCustomTabLayout' in TabLayout mit' app: theme'. Ich glaube nicht, dass es falsch ist ... – Moinkhan

2

In Versionen priror bis 14, die Sie einstellen müssen (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 im Falle von Android-Version ist gleich oder größer als 14 ist, müssen Sie festlegen, :

<item name="android:textAllCaps">false</item> 

müssen also, wenn Sie mit Versionen vor und nach 14 kompatibel sein, Sie auch Bedarf einen Ordner Werte-v14, und eine Datei styles.xml in diesem folde erstellen r mit dem Inhalt:

<?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> 
0

Sie auch diese in Ihrem Java-Code tun. Wenn Sie einen SlidingTabLayout Blick auf diese Probe verwenden:

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() wahr wie der Umfang 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 geändert (false) es gelöst das Problem für mich:

textView.setAllCaps(false); 

meine String-Ressource-Datei auch, dass ich für die Registerkarten verwenden, sieht wie folgt aus:

Wenn Sie jedoch alle Caps wie> TITLE WITH CAPS < hatten, würden Sie natürlich immer noch alle Caps in Ihren Tabs bekommen.

Ich machte keine weiteren Änderungen.

Es ist bemerkenswert, dass Sie textView.setAllCaps (false) auch festlegen können, aber das machte keinen Unterschied in meinem Fall. Ich habe gerade textView.setAllCaps auskommentiert (true).

35

@Paresh Mayani Antwort ist richtig Sie können jedoch nur Tab Stil

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab"> 
    <item name="textAllCaps">false</item> 
</style> 

erstellen und verwenden

<android.support.design.widget.TabLayout 
    app:tabTextAppearance="@style/MyCustomTextAppearance" 
    .../> 
+0

@Muhammad Umair Shafikes Lösung funktioniert. Wir müssen das Attribut 'app: tabTextAppearance' anstelle des Attributs 'style' verwenden. –

16

https://stackoverflow.com/a/34678235/1025379

<android.support.design.widget.TabLayout 
    app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget" 
/> 
+0

ja das ist die richtige Antwort. –

+0

Bestätigen Sie, keine anderen Antworten mit mehr Up-Stimmen auf dieser Seite haben den Trick für mich gemacht, aber dieses. Mein Projekt hat minSdkVersion = 16, targetSdkVersion = 26, Designbibliothek Version 26.0.0-alpha1 und ich benutze das 'android.support.design.widget.TabLayout'. –

3

Hier einfache Lösung besteht darin, ... .Genießen

for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) { 
     TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1)); 
     tabTextView.setAllCaps(false); 
    } 
2

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" /> 
0

Für diejenigen, die nicht andere Antworten bekommen arbeiten kann.

Das Definieren eines Stils funktioniert gut, wenn Sie über einen einzeiligen Tab-Text verfügen. Wenn Sie sich das TabLayout genauer anschauen, sehen Sie, dass es ein Feld design_tab_text_size_2line verwendet, wenn die Tabs mehr als eine Zeile haben.

Die einzige Möglichkeit, dieses Feld zu finden, besteht darin, es in Ihrer Dimen-Datei zu überschreiben.

setzen diese also in Ihre Werte/dimens.xml

<dimen name="design_tab_text_size_2line" tools:override="true">@dimen/10sp</dimen> 

Hoffe, es hilft. folgende Methode

0

Versuch und Sie können alle Methoden der TextView in TabLayout

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

Hoffe, es hilft implementieren.

Verwandte Themen