Estou tentando trabalhar no novo TabLayout
da biblioteca de design do Android.
Quero alterar o texto da guia para uma fonte personalizada . E, tentei pesquisar algum estilo relacionado a TabLayout
, mas acabei por isso .
Por favor, oriente como posso alterar as fontes do texto da guia.
Respostas:
Crie um TextView a partir de código Java ou XML como este
Certifique-se de manter o id como está aqui porque o TabLayout verifica este ID se você usar textview personalizado
Então, a partir do código, aumente este layout e defina o custom
Typeface
naquela textview e adicione esta view customizada à guiafonte
tabTextColor
etabSelectedTextColor
propriedade nesta situação?Se você estiver usando
TabLayout
e quiser alterar a fonte, será necessário adicionar um novo loop for à solução anterior, como este:Por favor, consulte a alteração do estilo da fonte nas guias da barra de ação usando sherlock
fonte
TabLayout
setTypeFace
é aTypeFace
, no caso de você não conseguir encontrar aFont
classe (que parece não existir para mim)Crie seu próprio estilo personalizado e use o estilo pai como
parent="@android:style/TextAppearance.Widget.TabWidget"
E em seu layout de guia, use este estilo como
app:tabTextAppearance="@style/tab_text"
Exemplo: Estilo:
Exemplo: componente de layout de guia:
fonte
parent="TextAppearance.Design.Tab"
no meu caso.TextAppearance.Widget.TabWidget
. A resposta de @Javatar consertou para mim.Ótima resposta de Praveen Sharma. Apenas um pequeno acréscimo: em vez de usar
changeTabsFont()
onde você precisarTabLayout
, você pode simplesmente usar o seu próprioCustomTabLayout
.E mais uma coisa.
TabView
é umLinearLayout
comTextView
dentro (também pode conter opcionalmenteImageView
). Portanto, você pode tornar o código ainda mais simples:Mas eu não recomendaria assim. Se a
TabLayout
implementação mudar, este código pode funcionar incorretamente ou até mesmo travar.Outra maneira de personalizar
TabLayout
é adicionar uma exibição personalizada a ele. Aqui está o grande exemplo .fonte
addTab(Tab tab, int position, boolean setSelected)
vez deaddTab(Tab tab)
.Para usar o suporte a fontes no
XML
recurso em dispositivos em execuçãoAndroid 4.1
(API nível 16) e superior, use a Biblioteca de Suporte 26+myfont.ttf
arquivo na pasta de fontes recém-criadaAo
res/values/styles.xml
adicionar:No arquivo de layout, adicione app: tabTextAppearance = "@ style / customfontstyle",
Consulte [fontes em xml]. ( Https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml )
fonte
O método a seguir mudará a fonte inteira
ViewGroup
recursivamente. Escolhi esse método porque você não precisa se preocupar com a estrutura interna doTabLayout
. Estou usando a biblioteca de caligrafia para definir uma fonte.fonte
Para suporte de design 23.2.0, usando setupWithViewPager, você terá que mover o código de addTab (guia Tab) para addTab (guia Tab, boolean setSelected).
fonte
Você pode usar isso, funciona para mim.
fonte
Bem, eu achei simples em 23.4.0 sem usar um loop. Basta substituir addTab (guia @NonNull Tab, boolean setSelected) conforme sugerido por @ejw.
E aqui está o XML
Espero que possa ajudar :)
fonte
android:textColor="@color/graylove"
deve ter o seletor de lista de estados para aquela com a cor selecionada em estado especificadaComo Andrei respondeu, você pode alterar a face da fonte estendendo a classe TabLayout . E como disse Penzzz , você não pode fazer isso no método addTab . Substitua o método onLayout conforme abaixo:
Deve substituir o método onLayout, porque, quando você usa o método setupWithViewPager para vincular o TabLayout ao ViewPager, você deve definir o texto das guias com o método setText ou no PagerAdapter depois disso e quando isso aconteceu, o método onLayout é chamado no ViewGroup pai ( TabLayout) e esse é o lugar para colocar a configuração de fontface. (Alterar um texto TextView causa a chamada do método onLayout de seu pai - um tabView tem dois filhos, um é ImageView e outro é TextView)
Outra solução:
Primeiro, essas linhas de código:
Na solução acima, deve ser escrito fora de dois loops.
Mas a melhor solução para API> = 16 é usar android: fontFamily :
Crie um diretório de recursos do Android denominado font e copie a fonte desejada para o diretório.
Em seguida, use estes estilos:
fonte
onLayout()
chamada com cada mudança de layout, como troca de guias ou até rolagem de lista abaixo das guias, comfor
s aninhados em umTabLayout
aplicativo de muitas guias ficarão com lag.onLayout()
é chamado várias vezes ao alternar entre guias (não tenho certeza do porquê exatamente), mas para compensar, eu só defino as fontes quando oboolean changed
é verdadeiro. Isso evita definir as fontes várias vezes.Meu método Resolve assim, altere o texto da guia especificada,
fonte
fonte
Extensão Kotlin que funcionou para mim:
fonte
Meu 2p, Kotlin com verificação de referência, aplicável em qualquer lugar, pois irá parar se algo estiver errado.
fonte
E aqui está minha implementação em Kotlin que também permite alterar a fonte das guias selecionadas e não selecionadas.
em attrs.xml:
fonte
Com as funções de extensão kotlin, use o seguinte:
}
fonte
mudança
if (tabViewChild instanceof TextView) {
para
para fazê-lo funcionar com android.support.design.widget.TabLayout (pelo menos de com.android.support:design:23.2.0)
fonte