Taille du texte de l'onglet de conception Android

97

J'ai des difficultés à changer la taille du texte des onglets du tablayout de la bibliothèque de conception (android.support.design.widget.TabLayout).

J'ai réussi à le changer en attribuant tabTextAppearance dans TabLayout

app:tabTextAppearance="@style/MyTabLayoutTextAppearance"

le style suivant

<style name="MyTabLayoutTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse">
    <item name="android:textSize">14sp</item>
</style>

mais j'ai 2 effets secondaires:

1) J'ai perdu la couleur d'accentuation de l'onglet sélectionné

2) Le texte de l'onglet n'est plus en majuscule.

Malko
la source

Réponses:

187
<style name="MineCustomTabText" parent="TextAppearance.Design.Tab">
    <item name="android:textSize">16sp</item>
</style>

L'utilisation est TabLayoutcomme ça

<android.support.design.widget.TabLayout
            app:tabTextAppearance="@style/MineCustomTabText"
            ...
            />
hnrain
la source
Fonctionne très bien. J'utilise le support lib 25.1.0.
Sufian
Fonctionne sur la bibliothèque de support 25.3.1
Luis
superbe thax bro you save my time ,,, son travail sur la lib 25.1.0
Kunal Dharaiya
@Sufian, cela ne fonctionne pas pour moi et j'utilise la même version de support que vous (25.1.0). Une idée pourquoi?
Sam
2
Si le texte de votre onglet est multiligne. Ensuite, le tabLayout en utilisant un champ différent pour définir la taille des textes. Veuillez vérifier ma réponse ici pour la solution: stackoverflow.com/a/48797329/700693
Evren Ozturk
46

Continuez à utiliser tabTextAppearance comme vous l'avez fait mais

1) pour corriger l'effet secondaire des majuscules, ajoutez textAllCap dans votre style:

<style name="MyTabLayoutTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse">
    <item name="android:textSize">14sp</item>
    <item name="android:textAllCaps">true</item>
</style>

2) pour corriger l'effet secondaire de la couleur de l'onglet sélectionné, ajoutez dans TabLayout xml les attributs de bibliothèque suivants:

app:tabSelectedTextColor="@color/color1"
app:tabTextColor="@color/color2" 

J'espère que cela t'aides.

u2gilles
la source
Cela fonctionne comme un charme maintenant. Merci u2gilles pour votre réponse rapide.
Malko
@ u2gilles J'ai utilisé une mise en page personnalisée dans les onglets qui est une mise en page linéaire avec 2 vues de texte, mais je veux changer une seule couleur d'affichage de texte lors de la sélection des onglets?
Erum
1
Si vous voulez définir <item name = "android: textAllCaps"> false </item>, alors il devrait y avoir une chaîne supplémentaire en plus de deux: <item name = "textAllCaps"> false </item>
CodeToLife
24

Travaillez sur les API 22 et 23 Faites ce style:

<style name="TabLayoutStyle" parent="Base.Widget.Design.TabLayout">
    <item name="android:textSize">12sp</item>
    <item name="android:textAllCaps">true</item>
</style>

Et appliquez-le à votre tablayout:

<android.support.design.widget.TabLayout
            android:id="@+id/contentTabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:background="@drawable/list_gray_border"
            app:tabTextAppearance="@style/TabLayoutStyle"
            app:tabSelectedTextColor="@color/colorPrimaryDark"
            app:tabTextColor="@color/colorGrey"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
Luidgi Gromat
la source
21

Faites comme suit.

1. Ajoutez le style au XML

    <style name="MyTabLayoutTextAppearance" parent="TextAppearance.Design.Tab">
        <item name="android:textSize">14sp</item>
    </style>

2. Appliquer le style

Trouvez la mise en page contenant le TabLayout et ajoutez le style. La ligne ajoutée est en gras.

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        app:tabTextAppearance="@style/MyTabLayoutTextAppearance" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
Jay Halani
la source
18

Essayez le snipped qui est mentionné ci-dessous, cela fonctionne aussi pour moi.

Dans ma mise en page xmloù j'ai mon TabLayout, j'ai ajouté un style à ce qui TabLayoutsuit:

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    style="@style/MyCustomTabLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabGravity="fill"
    app:tabMode="fixed" />

et dans mon style.xmlj'ai défini le style qui est utilisé dans ma mise en page xml, vérifiez le code pour les styles ajoutés ci-dessous:

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
    <item name="android:background">YOUR BACKGROUND COLOR</item>
    <item name="tabTextAppearance">@style/MyCustomTabText</item>
    <item name="tabSelectedTextColor">SELECTED TAB TEXT COLOR</item>
    <item name="tabIndicatorColor">SELECTED TAB INDICATOR COLOR</item>
</style>

<style name="MyCustomTabText" parent="TextAppearance.AppCompat.Button">
    <item name="android:textSize">YOUR TEXT SIZE</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@android:color/white</item>
</style>

J'espère que cela fonctionnera pour vous .....

ange
la source
15

J'ai un problème similaire et une résolution similaire:

1) taille

dans le xml, vous avez TabLayout,

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

puis avec style,

        <style name="CustomTextStyle" parent="@android:style/TextAppearance.Widget.TabWidget">
           <item name="android:textSize">16sp</item>
           <item name="android:textAllCaps">true</item>
        </style>

Si vous ne voulez pas que les caractères en majuscules mettent false dans "android: textAllCaps"

2) Couleur du texte des onglets sélectionnés ou non sélectionnés,

TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        tabLayout.setTabTextColors(getResources().getColorStateList(R.color.tab_selector,null));
    } else {
        tabLayout.setTabTextColors(getResources().getColorStateList(R.color.tab_selector));
    }

puis dans res / color / tab_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_selected="true" />
<item android:color="@color/white" />

Martín Huergo
la source
8
TabLayout  tab_layout = (TabLayout)findViewById(R.id.tab_Layout_);

private void changeTabsFont() {
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/"+ Constants.FontStyle);
    ViewGroup vg = (ViewGroup) tab_layout.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(font);
                ((TextView) tabViewChild).setTextSize(15);

            }
        }
    }
}

Ce code fonctionne pour moi en utilisant tablayout. Cela changera la taille des polices et changera également le style de police.

Cela vous aidera également les gars s'il vous plaît vérifier ce lien

https://stackoverflow.com/a/43156384/5973946

Ce code fonctionne pour la couleur du texte de changement de tableau, le type de visage (style de police) et la taille du texte.

viral 9966
la source
0

J'utilisais Android Pie et rien ne semblait fonctionner, alors j'ai joué avec l'attribut app: tabTextAppearance. Je sais que ce n'est pas la réponse parfaite, mais cela pourrait aider quelqu'un.

<android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="fixed"
        app:tabTextAppearance="@style/TextAppearance.AppCompat.Caption" />
Surbhit Rao
la source