web-dev-qa-db-de.com

android: textAllCaps = "false" funktioniert nicht für den TabLayout-Design-Support

Ich habe Android:textAllCaps="false" in meinem Android.support.design.widget.TabLayout eingestellt, weil ich dachte, der Tab-Titel steht nur in Großbuchstaben.

Wie kann ich alle Kappen entfernen?

49
dhuma1981

UPDATE FÜR DESIGN-BIBLIOTHEK 23.2.0+

Die ursprüngliche Antwort funktioniert nicht mit der Designbibliothek 23.2.0 oder höher. Danke für @ fahmad6 wies in einem Kommentar darauf hin, falls jemand diesen Kommentar verpasst hat, lege ich ihn hier. Sie müssen sowohl textAllCaps als auch Android:textAllCaps auf false setzen, um die Großschreibungseinstellung 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 werden Registerkarten erstellt, indem TabLayout die Eigenschaft textAllCaps auf true setzt. 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>
123
Paresh Mayani

Die Antwort von @Paresh Mayani ist korrekt, Sie können jedoch nur einen Tab-Stil 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"
    .../>
43
Ordon

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

<Android.support.design.widget.TabLayout
    app:tabTextAppearance="@Android:style/TextAppearance.Widget.TabWidget"
/>
23
susemi99

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" />
11
yousef

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);
    }
4
Balaji Gaikwad

Für die die andere Antworten nicht bekommen können .

Das Definieren eines Stils funktioniert einwandfrei, wenn Sie einen einzeiligen Tabulatortext haben. Wenn Sie sich TabLayout genau ansehen, wird das Feld design_tab_text_size_2line verwendet, wenn die Registerkarten mehr als eine Zeile haben.

Die einzige Möglichkeit, dieses Feld auszuführen, besteht darin, es in Ihrer dimen-Datei zu überschreiben.

Fügen Sie dies in Ihre Werte/dimens.xml ein

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

Ich hoffe es hilft.

4
Evren Ozturk

In Versionen priror bis 14 müssen Sie (wie von Paresh Mayani kommentiert) einstellen:

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

Wenn die Android-Version 14 oder mehr 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 also einen Ordner values-v14 und eine Datei styles.xml in diesem Ordner mit dem 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>
2
Pedro Leite

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 haben, damit seine alte Methode funktioniert.

In styles.xml write (übergeordnetes Element kann beispielsweise "@Android: style/TextAppearance.Widget.TabWidget", "TextAppearance.Design.Tab") variieren:

<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"
    />
1
CoolMind

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 () true als Umkreis 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 auf (falsch) änderte, wurde das Problem für mich gelöst:

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 Kappen wie> TITEL MIT ALLEN KAPPEN <hätte, würden Sie natürlich alle Kappen in Ihren Tabs bekommen.

Ich habe keine anderen Änderungen vorgenommen.

Es ist bemerkenswert, dass Sie auch textView.setAllCaps (false) setzen können, aber dies hat in meinem Fall keinen Unterschied gemacht. Ich habe gerade textView.setAllCaps (true) auskommentiert.

0
DroidCrafter

Änderung: <item name="Android:textAllCaps">false</item>

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

0
Fidan Bacaj

Versuchen Sie die folgende Methode, und Sie können alle Methoden von TextView in TabLayout implementieren.

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.

0
Pankaj Lilan