Comment définir l’atsortingbut layout_weight dynamicment à partir du code?

Comment puis-je définir la valeur de l’atsortingbut layout_weight pour le bouton dans android dynamicment à partir du code java?

Vous pouvez le transmettre dans le cadre du constructeur LinearLayout.LayoutParams :

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

Le dernier paramètre est le poids.

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 mise en page (xml), que vous souhaitez uniquement modifier le poids par programmation, cette méthode est préférable.

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

new a LayoutParams écrase les autres parameters définis dans votre fichier xml comme 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 la largeur et la 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); 

Si quelqu’un qui cherche une réponse, utilise ceci:

 LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams(); lay.weight = 0.5; 

Si vous initialisez votre mise en page à partir d’un fichier XML, cela sera beaucoup plus pratique que de fournir de nouveaux parameters de mise en page pour la disposition linéaire.

Tout LinearLayout.LayoutParams et TableLayout.LayoutParams fonctionné pour moi, pour les boutons le bon est TableRow.LayoutParams . C’est:

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

A propos de l’utilisation de MATCH_PARENT ou WRAP_CONTENT soient les mêmes.

Si vous avez déjà défini votre vue dans le fichier layout (xml) et que vous souhaitez uniquement modifier le poids pro grammaticalement, alors la création de LayoutParams écrase les autres parameters définis dans votre fichier xml.

Donc, vous devez d’abord utiliser “getLayoutParams” puis setLayoutParams

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

Si layoutparams est déjà défini (en XML ou dynamicment), voici une ligne:

 ((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1; 

En utilisant Kotlin, vous pouvez faire quelque chose comme:

 import android.content.Context import android.support.v4.content.ContextCompat import android.support.v7.widget.CardView import android.widget.* import android.widget.LinearLayout class RespondTo : CardView { constructor(context: Context) : super(context) { init(context) } private fun init(context: Context) { val parent = LinearLayout(context) parent.apply { layoutParams = LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT, 1.0f).apply { orientation = LinearLayout.HORIZONTAL addView(EditText(context).apply { id = generateViewId() layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.9f).apply { } }) addView(ImageButton(context).apply({ layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f) background = null setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_save_black_24px)) id = generateViewId() layoutParams = RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply { addRule(RelativeLayout.ALIGN_PARENT_RIGHT) // addRule(RelativeLayout.LEFT_OF, myImageButton.id) } })) } } this.addView(parent) } }