Wie kann ich den Wert für das Attribut layout_weight
für die Schaltfläche in Android dynamisch aus Java-Code festlegen?
Sie können es als Teil des LinearLayout.LayoutParams
-Konstruktors übergeben:
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
Der letzte Parameter ist das Gewicht.
Verwenden Sie 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, Erichs Antwort ist einfacher!
Wenn Sie Ihre Ansicht bereits in Ihrer Layoutdatei (XML-Datei) definieren und die Gewichtung nur programmgesteuert ändern möchten, ist dieser Weg besser
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
ein neues LayoutParams überschreibt andere in Ihrer XML-Datei definierte Parameter wie Ränder oder Sie müssen alle in LayoutParams angeben.
Wenn der Konstruktor mit Breite, Höhe und Gewicht nicht funktioniert, versuchen Sie, den Konstruktor mit Breite und Höhe zu verwenden. Und dann das Gewicht manuell einstellen.
Wenn Sie möchten, dass die Breite entsprechend dem Gewicht festgelegt wird, legen Sie im Konstruktor die Breite auf 0 fest. Gleiches gilt für die Höhe . Der folgende Code funktioniert für mich.
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);
Wenn ich jemanden suche, der nach einer Antwort sucht, benutze diese:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
Wenn Sie Ihr Layout von einer XML-Datei aus initialisieren, ist dies viel bequemer als die Angabe neuer Layoutparameter für das lineare Layout.
Jeder von LinearLayout.LayoutParams
und TableLayout.LayoutParams
hat für mich funktioniert, für Knöpfe ist TableRow.LayoutParams
die richtige. Das ist:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
Die Verwendung von MATCH_PARENT
oder WRAP_CONTENT
ist gleich.
Wenn Sie Ihre Ansicht bereits in der Layoutdatei (XML-Datei) definiert haben und nur die Gewichtung pro grammatisch ändern möchten, werden beim Erstellen neuer LayoutParams andere in Ihrer XML-Datei definierte Parameter überschrieben.
Sie sollten also zuerst "getLayoutParams" und dann setLayoutParams verwenden
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams();
params.weight = 4f;
mButton.setLayoutParams(params);
Wenn layoutparams
bereits definiert ist (in XML oder dynamisch), ist hier ein Einzeiler:
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
Mit Kotlin können Sie Folgendes tun:
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)
}
}
In Koltin
val params = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 2.0f)
params.weight = 1.0f
button.layoutParams = params