299 votes

Comment définir l'attribut layout_weight de manière dynamique à partir du code?

Comment puis-je définir la valeur de l'attribut layout_weight pour le bouton dans Android dynamiquement à partir de code Java?

545voto

Erich Douglass Points 21714

Vous pouvez le transmettre dans le constructeur LinearLayout.LayoutParams :

 LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
                             LayoutParams.MATCH_PARENT,
                             LayoutParams.MATCH_PARENT, 1.0f);
 

Le dernier paramètre est le poids.

131voto

kcoppock Points 57219

Utilisez LinearLayout.LayoutParams :

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
Button button = new Button(this);
button.setLayoutParams(params);
 

EDIT: Ah, la réponse d'Erich est plus facile!

94voto

pkliang Points 31

Si vous définissez déjà votre vue dans votre fichier de présentation (xml), souhaitez uniquement modifier le poids par programmation, cette méthode est préférable.

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams(); params.weight = 1.0; mButton.setLayoutParams(params);

new a LayoutParams écrase les autres paramètres définis dans votre fichier xml, tels que les marges, ou vous devez tous les spécifier dans LayoutParams.

32voto

Ganindu Points 51

Si le constructeur avec largeur, hauteur et poids ne fonctionne pas, essayez d'utiliser le constructeur avec largeur et hauteur. Et puis définissez manuellement le poids.

Et si vous souhaitez que la largeur soit définie en fonction du poids, définissez la largeur sur 0 dans le constructeur. Même chose pour la hauteur. Le code ci-dessous fonctionne pour moi.

 LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.3f;
child1.setLayoutParams(childParam1);

LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.7f;
child2.setLayoutParams(childParam2);

parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);
 

8voto

gantzer89 Points 144

N'importe lequel de LinearLayout.LayoutParams et TableLayout.LayoutParams fonctionné pour moi, pour les boutons, le bouton de droite est TableRow.LayoutParams . C'est:

             TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
                    TableRow.LayoutParams.MATCH_PARENT,
                    TableRow.LayoutParams.WRAP_CONTENT, 1f);
 

À propos de l'utilisation de MATCH_PARENT ou WRAP_CONTENT soit identique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X