web-dev-qa-db-fra.com

android: textAllCaps = "false" ne fonctionne pas pour TabLayout design Support

J'ai défini Android:textAllCaps="false" dans mon Android.support.design.widget.TabLayout parce que le titre de l'onglet est affiché uniquement en majuscules.

Comment puis-je enlever tous les chapeaux?

49
dhuma1981

MISE À JOUR POUR LA BIBLIOTHÈQUE DE CONCEPTION 23.2.0+

La réponse d'origine ne fonctionne pas avec la bibliothèque de conception 23.2.0 ou ultérieure. Merci pour @ fahmad6 dans le commentaire, au cas où quelqu'un l'aurait manqué, je le mettrai ici. Vous devez définir textAllCaps et Android:textAllCaps sur false pour désactiver tous les paramètres de majuscule.

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

RÉPONSE ORIGINALE

Par défaut, les onglets créés par TabLayout définissent la propriété textAllCaps sur true, vous devez définir un style rendant cet indicateur faux.

<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

La réponse de @Paresh Mayani est correcte mais vous ne pouvez créer que du style de tabulation 

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

Et l'utiliser en utilisant

<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

utilisez cet attribut app:tabTextAppearance="@Android:style/TextAppearance.Widget.TabWidget"Il fonctionnera.

  <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

Voici une solution simple .... Profitez

 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

Pour ceux qui ne peuvent pas travailler avec d’autres réponses .

Définir un style fonctionne correctement lorsque vous avez du texte de tabulation sur une seule ligne . Si vous examinez de près le TabLayout, vous constaterez qu’il utilise un champ design_tab_text_size_2line lorsque les onglets comportent plusieurs lignes.

La seule façon pour moi d’affecter ce champ est de le remplacer dans votre fichier Dimen.

Alors mettez ceci dans vos valeurs/dimens.xml

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

J'espère que ça aide.

4
Evren Ozturk

Dans les versions antérieures à 14, vous devez définir (comme le commente Paresh Mayani):

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

Mais, dans le cas où la version Android est égale ou supérieure à 14, vous devez définir:

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

Donc, si vous devez être compatible avec les versions antérieures et postérieures à 14, vous aussi devez créer un dossier values-v14 et un fichier styles.xml dans ce dossier avec le contenu:

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

Dans mon cas, deux variantes fonctionnent:

1) Par Bogdan (susemi99):

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

2) Par Paresh Mayani. Je voulais avoir Android:textAllCaps="false" et Android:textSize="15sp" simultanément, pour que son ancienne méthode fonctionne.

Dans styles.xml write (le parent peut varier, par exemple, "@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>

Appliquer ce style dans la mise en page:

<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

Vous pouvez également le faire dans votre code Java. Si vous utilisez un SlidingTabLayout, regardez cet exemple:

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

Notez que textView.setAllCaps () a true comme périmètre:

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

Quand j'ai changé cela en (faux), cela a résolu le problème pour moi:

textView.setAllCaps(false);

De plus, mon fichier de ressources de chaîne que j'utilise pour les onglets ressemble à ceci:

<string name="tab_title">Title with capital and smaller case</string>

Cependant, si elle avait toutes les majuscules comme> TITLE WITH ALL CAPS <, vous auriez bien sûr toujours toutes les majuscules dans vos onglets.

Je n'ai fait aucun autre changement.

Il est à noter que vous pouvez également définir textView.setAllCaps (false), mais cela ne fait aucune différence dans mon cas. Je viens de commenter textView.setAllCaps (true).

0
DroidCrafter

Changement: <item name="Android:textAllCaps">false</item>

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

0
Fidan Bacaj

Essayez la méthode suivante et vous pouvez implémenter toutes les méthodes de TextView dans 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);
            }
        }
    }
}

J'espère que ça aide.

0
Pankaj Lilan