Estoy tratando de trabajar en lo nuevo TabLayout
de la biblioteca de diseño de Android.
Quiero cambiar el texto de la pestaña a una fuente personalizada . Y traté de buscar algunos estilos relacionados TabLayout
, pero terminé con esto .
Indique cómo puedo cambiar las fuentes de texto de las pestañas.
Respuestas:
Cree un TextView a partir de código Java o XML como este
Asegúrese de mantener la identificación como está aquí porque TabLayout verifica esta identificación si usa la vista de texto personalizada
Luego, desde el código, infle este diseño y configure la vista personalizada
Typeface
en esa vista de texto y agregue esta vista personalizada a la pestañafuente
tabTextColor
ytabSelectedTextColor
propiedad en esta situación?Si está utilizando
TabLayout
y desea cambiar la fuente, debe agregar un nuevo bucle for a la solución anterior como esta:Consulte cambiar el estilo de fuente en las pestañas de la barra de acción usando sherlock
fuente
TabLayout
setTypeFace
es aTypeFace
, en caso de que no pueda encontrar laFont
clase (que no parece existir para mí)Cree su propio estilo personalizado y utilice el estilo principal como
parent="@android:style/TextAppearance.Widget.TabWidget"
Y en el diseño de su pestaña use este estilo como
app:tabTextAppearance="@style/tab_text"
Ejemplo: Estilo:
Ejemplo: componente de diseño de pestañas:
fuente
parent="TextAppearance.Design.Tab"
en mi caso.TextAppearance.Widget.TabWidget
. La respuesta de @Javatar lo arregló para mí.Gran respuesta de Praveen Sharma. Solo una pequeña adición: en lugar de usar en
changeTabsFont()
cualquier lugar que necesiteTabLayout
, simplemente puede usar el suyoCustomTabLayout
.Y una cosa más.
TabView
es unLinearLayout
conTextView
interior (también puede contener opcionalmenteImageView
). Para que pueda simplificar aún más el código:Pero no lo recomendaría de esta manera. Si la
TabLayout
implementación cambia, este código puede funcionar incorrectamente o incluso fallar.Otra forma de personalizarlo
TabLayout
es agregarle una vista personalizada. Aquí está el gran ejemplo .fuente
addTab(Tab tab, int position, boolean setSelected)
lugar deaddTab(Tab tab)
.Para utilizar la compatibilidad con fuentes en la
XML
función en dispositivos que se ejecutanAndroid 4.1
(API nivel 16) y superior, utilice la biblioteca de compatibilidad 26+.myfont.ttf
archivo en la carpeta de fuentes recién creadaEn
res/values/styles.xml
agregar:En el archivo de diseño, agregue la aplicación: tabTextAppearance = "@ style / customfontstyle",
Consulte [fuentes en xml]. ( Https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml )
fuente
El siguiente método cambiará la fuente por completo de forma
ViewGroup
recursiva. Elegí este método porque no tienes que preocuparte por la estructura interna deTabLayout
. Estoy usando la biblioteca de caligrafía para establecer una fuente.fuente
Para soporte de diseño 23.2.0, usando setupWithViewPager, tendrá que mover el código de addTab (pestaña Tab) a addTab (pestaña Tab, boolean setSelected).
fuente
Puedes usar esto, me funciona.
fuente
Bueno, lo encontré simple en 23.4.0 sin usar un bucle. Simplemente anule addTab (pestaña @NonNull Tab, boolean setSelected) como lo sugiere @ejw.
Y aquí está el XML
Espero que pueda ayudar :)
fuente
android:textColor="@color/graylove"
debe tener el selector de lista de estado para eso con el color state_selected especificadoComo respondió Andrei , puede cambiar la fuente ampliando la clase TabLayout . Y como dijo Penzzz , no puede hacerlo con el método addTab . Invalidar OnLayout método como bramido:
Debe sobrescribir el método onLayout, porque, cuando usa el método setupWithViewPager para vincular el TabLayout con el ViewPager, debe establecer el texto de las pestañas con el método setText o en el PagerAdapter después de eso y cuando esto sucedió, el método onLayout se llamará en el ViewGroup principal ( TabLayout) y ese es el lugar para colocar la configuración de fontface. (Cambiar un texto de TextView causa que se llame al método onLayout de su padre: un tabView tiene dos hijos, uno es ImageView y otro es TextView)
Otra solución:
Primero, estas líneas de código:
En la solución anterior, debe escribirse fuera de dos bucles.
Pero una mejor solución para API> = 16 es usar android: fontFamily :
Cree un directorio de recursos de Android llamado fuente y copie la fuente que desee en el directorio.
Luego usa estos estilos:
fuente
onLayout()
se llamó con cada cambio de diseño, como el cambio de pestaña o incluso el desplazamiento de listas debajo de las pestañas, confor
s anidados en muchas pestañas, laTabLayout
aplicación será lenta.onLayout()
, me llaman varias veces cuando se cambia de pestaña (no estoy seguro de por qué exactamente), pero para tener en cuenta esto, solo configuro las fuentes cuandoboolean changed
es verdadero. Hacer eso evita configurar las fuentes varias veces.Mi método de resolución así, cambia el texto de la pestaña Especificado,
fuente
fuente
Extensión de Kotlin que funcionó para mí:
fuente
Mi 2p, Kotlin con verificación de referencia, aplicable en todas partes, ya que se detendrá si algo anda mal.
fuente
Y aquí está mi implementación en Kotlin que también permite cambiar la fuente para las pestañas seleccionadas y no seleccionadas.
en attrs.xml:
fuente
Con las funciones de extensión de kotlin use esto:
}
fuente
Cambio
if (tabViewChild instanceof TextView) {
para
para que funcione con android.support.design.widget.TabLayout (al menos de com.android.support:design:23.2.0)
fuente