Comment puis-je définir la valeur de l'attribut layout_weightpour le bouton dans Android dynamiquement à partir du code Java?
Comment puis-je définir la valeur de l'attribut layout_weightpour le bouton dans Android dynamiquement à partir du code Java?
Réponses:
Vous pouvez le transmettre en tant que partie du LinearLayout.LayoutParamsconstructeur:
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.
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1fs'il n'y a pas de décimales
Relative
Utilisation 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!
FILL_PARENTa été déconseillé et MATCH_PARENTdoit être utilisé à la place.
MATCH_PARENTpeut être utilisé au lieu de FILL_PARENTmême sur des appareils plus anciens.
FILL_PARENTcontre MATCH_PARENT.
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 paramètres 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 largeur et hauteur. Et puis réglez 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);
childParam2.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.
layout_weighta déjà été présentée, vous devez appeler View.requestLayout()pour mettre à jour.
N'importe lequel LinearLayout.LayoutParamset a TableLayout.LayoutParamsfonctionné 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);
À propos de l'utilisation MATCH_PARENTou de WRAP_CONTENTla même chose.
FILL_PARENTa été déconseillé et MATCH_PARENTdoit être utilisé à la place.
LayoutParamsparent direct. Je suppose que vous avez eu un plantage à essayer d'utiliser LinearLayout.LayoutParamssans le parent LinearLayout.
Si vous avez déjà défini votre vue dans le fichier de mise en page (xml) et que vous souhaitez uniquement modifier le poids de manière grammaticale, la création de nouveaux 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 layoutparamsest déjà défini (en XML ou dynamiquement), 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)
}
}