J'essaie de travailler sur le nouveau TabLayout
de la bibliothèque de conception Android.
Je veux changer le texte de l'onglet en police personnalisée . Et, j'ai essayé de chercher un peu de style lié à TabLayout
, mais a fini jusqu'à ce .
Veuillez indiquer comment modifier les polices du texte des onglets.
Réponses:
Créez un TextView à partir de Java Code ou XML comme celui-ci
Assurez-vous de conserver l'ID tel qu'il est ici car le TabLayout vérifie cet ID si vous utilisez une vue de texte personnalisée
Ensuite, à partir du code, gonflez cette mise en page et définissez la personnalisation
Typeface
sur cette vue de texte et ajoutez cette vue personnalisée à l'ongletla source
tabTextColor
ettabSelectedTextColor
propriété dans cette situation?Si vous utilisez
TabLayout
et que vous souhaitez changer la police, vous devez ajouter une nouvelle boucle for à la solution précédente comme ceci:Veuillez vous référer au changement de style de police dans les onglets de la barre d'action à l'aide de Sherlock
la source
TabLayout
setTypeFace
est aTypeFace
, au cas où vous ne trouvez pas laFont
classe (qui ne semble pas exister pour moi)Créez votre propre style personnalisé et utilisez le style parent comme
parent="@android:style/TextAppearance.Widget.TabWidget"
Et dans la mise en page de votre onglet, utilisez ce style comme
app:tabTextAppearance="@style/tab_text"
Exemple: Style:
Exemple: composant de mise en page des onglets:
la source
parent="TextAppearance.Design.Tab"
dans mon cas.TextAppearance.Widget.TabWidget
. La réponse de @Javatar l'a corrigé pour moi.Excellente réponse de praveen Sharma. Juste un petit ajout: au lieu d'utiliser
changeTabsFont()
partout où vous avez besoinTabLayout
, vous pouvez simplement utiliser le vôtreCustomTabLayout
.Et encore une chose.
TabView
est unLinearLayout
avec à l'TextView
intérieur (il peut aussi éventuellement contenirImageView
). Ainsi, vous pouvez rendre le code encore plus simple:Mais je ne recommanderais pas cette façon. Si l'
TabLayout
implémentation change, ce code peut ne pas fonctionner correctement ou même planter.Une autre façon de personnaliser
TabLayout
consiste à ajouter une vue personnalisée. Voici le bon exemple .la source
addTab(Tab tab, int position, boolean setSelected)
au lieu deaddTab(Tab tab)
.Pour utiliser la prise en charge des polices dans la
XML
fonctionnalité sur les appareils exécutantAndroid 4.1
(niveau d'API 16) et supérieur, utilisez la bibliothèque de support 26+.myfont.ttf
fichier dans le dossier de polices nouvellement crééSur
res/values/styles.xml
ajouter:Sur le fichier de mise en page, ajoutez l'application: tabTextAppearance = "@ style / customfontstyle",
Veuillez vous référer à [fonts in xml]. ( Https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml )
la source
La méthode suivante changera la police en entier de
ViewGroup
manière récursive. J'ai choisi cette méthode parce que vous n'avez pas à vous soucier de la structure interne deTabLayout
. J'utilise la bibliothèque de calligraphie pour définir une police.la source
Pour la prise en charge de la conception 23.2.0, à l'aide de setupWithViewPager, vous devrez déplacer le code de addTab (onglet Tab) vers addTab (onglet Tab, booléen setSelected).
la source
Vous pouvez utiliser ceci, cela fonctionne pour moi.
la source
Eh bien, je l'ai trouvé simple dans 23.4.0 sans utiliser de boucle. Remplacez simplement addTab (onglet @NonNull Tab, booléen setSelected) comme suggéré par @ejw.
Et voici le XML
J'espère que cela pourrait aider :)
la source
android:textColor="@color/graylove"
devrait avoir le sélecteur de liste d'état pour celui avec la couleur state_selected spécifiéeComme Andrei a répondu, vous pouvez changer la police en étendant la classe TabLayout . Et comme Penzzz l'a dit, vous ne pouvez pas le faire avec la méthode addTab . Remplacez la méthode onLayout comme ci-dessous:
Doit remplacer la méthode onLayout, car, lorsque vous utilisez la méthode setupWithViewPager pour lier le TabLayout avec le ViewPager, vous devez définir le texte des tabulations soit avec la méthode setText, soit dans le PagerAdapter après cela et lorsque cela se produit, la méthode onLayout est appelée sur le ViewGroup parent ( TabLayout) et c'est l'endroit où mettre le paramètre fontface. (La modification d'un texte TextView provoque l'appel de la méthode onLayout de son parent - Un tabView a deux enfants, l'un est ImageView et l'autre TextView)
Une autre solution:
Tout d'abord, ces lignes de code:
Dans la solution ci-dessus, doit être écrit en dehors de deux boucles.
Mais une meilleure solution pour l' API> = 16 utilise android: fontFamily :
Créez un répertoire de ressources Android nommé police et copiez la police souhaitée dans le répertoire.
Ensuite, utilisez ces styles:
la source
onLayout()
appelé à chaque changement de mise en page comme le changement d'onglet ou même le défilement de la liste sous les onglets, avec desfor
s imbriqués dans de nombreux onglets, l'TabLayout
application sera retardée.onLayout()
appelé plusieurs fois lors du changement d'onglet (je ne sais pas pourquoi exactement), mais pour en tenir compte, je ne définis les polices que lorsque leboolean changed
est vrai. Cela empêche de définir les polices plusieurs fois.Ma méthode Resolve comme ceci, changez le texte de l'onglet spécifié,
la source
la source
Extension Kotlin qui a fonctionné pour moi:
la source
Mon 2p, Kotlin avec vérification des références, applicable partout car il s'arrêtera si quelque chose ne va pas.
la source
Et voici mon implémentation dans Kotlin qui permet également de changer de police pour les onglets sélectionnés et non sélectionnés.
dans attrs.xml:
la source
Avec les fonctions d'extension kotlin, utilisez ceci:
}
la source
Changement
if (tabViewChild instanceof TextView) {
pour
pour le faire fonctionner avec android.support.design.widget.TabLayout (au moins à partir de com.android.support:design:23.2.0)
la source