Comment puis-je définir la valeur de l'attribut layout_weight
pour le bouton dans Android dynamiquement à partir de code Java?
Réponses
Trop de publicités? 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!
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.
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);
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.