4

J'utilise TabLayout & ViewPager. J'essaie de changer la taille de l'onglet, comme WhatsApp (icône de l'appareil photo). La taille des trois onglets est égale, mais l'onglet de la caméra est plus petit. Dans chaque tentative que je fais la taille des onglets reste la même (égale à travers tous les onglets). Merci.Largeur de tabulation différente pour TabLayout

enter image description here

+0

Montrez-nous ce que vous avez essayé. – Okas

+0

il y a 4 icône de ping, 3 png ont les mêmes hauteurs et largeurs. L'un est différent comme l'icône d'appareil-photo. –

+0

J'essaie de changer les tailles, mais c'est impossible. Ils sortent toujours à taille égale –

Répondre

8

Vous devez réduire le poids du LinearLayout de l'onglet correspondant.

LinearLayout layout = ((LinearLayout) ((LinearLayout) tabLayout.getChildAt(0)).getChildAt(YOUR_TAB_NUMBER)); 
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) layout.getLayoutParams(); 
layoutParams.weight = YOUR_WEIGHT; // e.g. 0.5f 
layout.setLayoutParams(layoutParams); 

Espérons que ça aide!

+0

Cela fonctionne comme un charme. Je vous remercie! Mais est-il possible de définir la largeur de la tabulation comme wrap_content? – sembozdemir

+0

Je l'ai trouvé. Vois ma réponse. – sembozdemir

2

La réponse de @ digger fonctionne. Toutefois, si vous souhaitez que l'onglet dont une icône enveloppe uniquement son contenu, vous pouvez définir le poids sur 0 et la largeur sur LinearLayout.LayoutParams.WRAP_CONTENT. Cela a fonctionné pour moi.

fun TabLayout.setTabWidthAsWrapContent(tabPosition: Int) { 
    val layout = (this.getChildAt(0) as LinearLayout).getChildAt(tabPosition) as LinearLayout 
    val layoutParams = layout.layoutParams as LinearLayout.LayoutParams 
    layoutParams.weight = 0f 
    layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT 
    layout.layoutParams = layoutParams 
}