J'ai des onglets de configuration comme UPDATE 29/05/2015 this post. Les onglets prennent toute leur largeur sur mon Nexus 4 mobile, mais sur la tablette Nexus 7, ils sont au centre et ne couvrent pas toute la largeur de l'écran.
Capture d'écran du Nexus 7 Capture d'écran du Nexus 4
Réponses:
Une réponse "plus simple" empruntée à Kaizie serait simplement d'ajouter
app:tabMaxWidth="0dp"
dans votreTabLayout
xml:la source
J'ai eu le même problème et j'ai vérifié le style TabLayout, et j'ai trouvé que son style par défaut est celui
Widget.Design.TabLayout
qui a différentes implémentations (normal, paysage et sw600dp).Celui dont nous avons besoin est celui pour les tablettes (sw600dp) qui a l'implémentation suivante:
A partir de ce style, nous utiliserons " tabGravity " (dont les valeurs possibles sont "center" ou "fill") en utilisant la valeur "fill".
Mais nous devons aller plus loin, puis nous voyons que celle-ci s'étend, à partir de
Base.Widget.Design.TabLayout
laquelle la mise en œuvre est:Donc, à partir de ce style, nous devrons remplacer " tabMaxWidth ". Dans mon cas, je l'ai réglé sur
0dp
, il n'a donc pas de limite.Et mon style ressemblait à ceci:
Et puis la barre d'onglets remplira tout l'écran d'un côté à l'autre.
la source
Solution pour faire défiler: (TabLayout.MODE_SCROLLABLE), c'est-à-dire quand vous avez besoin de plus de 2 onglets (onglets dynamiques)
Étape 1: style.xml
Étape 2: votre mise en page XML
Étape 3: Dans votre activité / fragment où que vous ayez des onglets.
la source
addTab
et défini le poids de chaque onglet lors de son ajout.override fun addTab(tab: Tab, position: Int, setSelected: Boolean) { super.addTab(tab, position, setSelected) allotEachTabWithEqualWidth() }
Pour forcer les onglets à occuper toute la largeur (divisés en tailles égales), appliquez ce qui suit à la
TabLayout
vue:la source
TabLayout
est défini surapp:tabMode=“scrollable”
, cela entraînera la longueur fixe des onglets (les mots longs seront enroulés) et les onglets ne glisseront plus, ce qui rendra les onglets "fixes" à nouveau.C'est utile, vous devez essayer
la source
travaille pour moi. Cela a également
xmlns:app="http://schemas.android.com/apk/res-auto"
la source
Pour moi, le code suivant a fonctionné et était suffisant.
la source
Consultez le code ci-dessous pour trouver des solutions.
Voici le code de mise en page:
Remarque, pour le nombre d'onglets dynamique, n'oubliez pas d'appeler setTabNumbers (tabcount).
Référence tirée de https://medium.com/@elsenovraditya/set-tab-minimum-width-of-scrollable-tablayout-programmatically-8146d6101efe
la source
Solution pour Scrollable (Kotlin)
En xml:
À Kotlin:
Dans mon cas, si moins de 3 onglets, j'alloue un espace égal.
Remarque: Si la condition est selon votre condition
la source
Pourquoi tout ce travail mouvementé? Mettez simplement
app:tabMode="scrollable"
votre TabLayout en XML. C'est tout.la source
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
Il s'agit également d'une propriété à définir pour tabLayout, quel que soit le nombre d'onglets que vous ajoutez, statiques ou dynamiques.Dans ma variante de ce problème, j'avais 3 onglets de taille moyenne qui ne prenaient pas toute la largeur sur les tablettes. Je n'avais pas besoin que les onglets puissent défiler sur les tablettes, car les tablettes sont assez grandes pour afficher les onglets tous ensemble sans défilement. Mais j'avais besoin que les onglets puissent défiler sur les téléphones, car les téléphones sont trop petits pour afficher tous les onglets ensemble.
La meilleure solution dans mon cas était d'ajouter un
res/layout-sw600dp/main_activity.xml
fichier, où le TabLayout pertinent pourrait avoirapp:tabGravity="fill"
etapp:tabMode="fixed"
. Mais dans mon habituéres/layout/main_activity.xml
, j'ai laissé de côtéapp:tabGravity="fill"
etapp:tabMode="fixed"
, et j'ai eu à laapp:tabMode="scrollable"
place.la source
Veuillez noter que vous devez également définir
pour remplir tout l'espace
la source