Comment définir la valeur de l'attribut layout_weight
pour le bouton dans Android de manière dynamique à partir de 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 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.0f;
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. Il en va de même 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 je cherche une réponse, utilisez 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 paramètres de mise en page pour la mise en page linéaire.
N'importe lequel de LinearLayout.LayoutParams
et TableLayout.LayoutParams
a fonctionné pour moi, pour les boutons le droit 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.
Si vous avez déjà défini votre vue dans un fichier layout (xml) et que vous souhaitez uniquement modifier le poids de manière grammaticale, la création de LayoutParams écrase les autres paramètres 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 de manière dynamique), 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)
}
}
Dans Koltin
val params = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 2.0f)
params.weight = 1.0f
button.layoutParams = params