Tenho guias de instalação como ATUALIZAÇÃO 29/05/2015 nesta postagem. As guias têm largura total no meu celular Nexus 4, mas no tablet do nexus 7 ele fica no centro e não cobre a largura da tela inteira.
Captura de tela do Nexus 7
Tenho guias de instalação como ATUALIZAÇÃO 29/05/2015 nesta postagem. As guias têm largura total no meu celular Nexus 4, mas no tablet do nexus 7 ele fica no centro e não cobre a largura da tela inteira.
Captura de tela do Nexus 7
Respostas:
Uma resposta "mais simples" emprestada do Kaizie estaria apenas adicionando
app:tabMaxWidth="0dp"
no seuTabLayout
xml:fonte
Eu tive o mesmo problema e verifiquei o estilo TabLayout, e descobri que seu estilo padrão é o de
Widget.Design.TabLayout
implementações diferentes (normal, paisagem e sw600dp).O que precisamos é o de tablets (sw600dp), que possui a seguinte implementação:
Nesse estilo, usaremos " tabGravity " (cujos valores possíveis são "centro" ou "preenchimento") usando o valor "preenchimento".
Mas precisamos ir mais fundo e, em seguida, vemos que este se estende de
Base.Widget.Design.TabLayout
qual implementação é:Portanto, a partir deste estilo, precisaremos substituir " tabMaxWidth ". No meu caso, defino-o para
0dp
que ele não tenha limites.E meu estilo ficou assim:
E então a barra de guias preencherá a tela inteira de um lado para o outro.
fonte
Solução para rolagem: (TabLayout.MODE_SCROLLABLE), ou seja, sempre que você precisar de mais de 2 guias (guias dinâmicas)
Etapa 1: style.xml
Etapa 2: seu layout xml
Etapa 3: em sua Atividade / Fragmento, sempre que houver guias.
fonte
addTab
e defino o peso de cada guia conforme ela foi adicionada.override fun addTab(tab: Tab, position: Int, setSelected: Boolean) { super.addTab(tab, position, setSelected) allotEachTabWithEqualWidth() }
Para forçar as guias a ocuparem toda a largura (divididas em tamanhos iguais), aplique o seguinte à
TabLayout
exibição:fonte
TabLayout
estiver definidoapp:tabMode=“scrollable”
, resultará no comprimento fixo das guias (as palavras longas serão quebradas) e as guias não serão mais deslizadas, essencialmente tornando as guias "fixas" novamente.Isso é útil, você deve tentar
fonte
trabalhe para mim. Isso também tem
xmlns:app="http://schemas.android.com/apk/res-auto"
fonte
Para mim, o código a seguir funcionou e foi suficiente.
fonte
Verifique o código abaixo para soluções.
Abaixo está o código do layout:
Observe que, para a contagem dinâmica de guias, não se esqueça de chamar setTabNumbers (tabcount).
Referência retirada de https://medium.com/@elsenovraditya/set-tab-minimum-width-of-scrollable-tablayout-programmatically-8146d6101efe
fonte
Solução para Scrollable (Kotlin)
Em xml:
Em Kotlin:
No meu caso, se menos de 3 guias alocarem espaço igual.
Nota: Se a condição é conforme sua exigência
fonte
Por que todo esse trabalho agitado? Basta colocar o
app:tabMode="scrollable"
seu TabLayout em XML. É isso aí.fonte
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
Também é apenas uma propriedade a ser definida para tabLayout, não importa quantas guias você esteja adicionando, estática ou dinâmica.Na minha variante desse problema, eu tinha três guias de tamanho moderado que não estavam ocupando toda a largura dos tablets. Eu não precisava que as guias fossem roláveis nos tablets, pois os tablets são grandes o suficiente para exibir as guias juntas sem necessidade de rolagem. Mas eu precisava que as guias fossem roláveis nos telefones, pois os telefones são pequenos demais para exibir todas as guias juntas.
A melhor solução no meu caso foi adicionar um
res/layout-sw600dp/main_activity.xml
arquivo, onde o TabLayout relevante poderia terapp:tabGravity="fill"
eapp:tabMode="fixed"
. Mas no meu regularres/layout/main_activity.xml
, eu deixei de foraapp:tabGravity="fill"
eapp:tabMode="fixed"
, emapp:tabMode="scrollable"
vez disso.fonte
Observe que você também precisa definir
para preencher todo o espaço
fonte