Wie kann ich den Wert für das Attribut layout_weightfür die Schaltfläche in Android dynamisch aus Java-Code festlegen ?
Wie kann ich den Wert für das Attribut layout_weightfür die Schaltfläche in Android dynamisch aus Java-Code festlegen ?
Antworten:
Sie können es als Teil des LinearLayout.LayoutParamsKonstruktors ü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.
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1fwenn es keine Dezimalstellen gibt
Relative
Verwendung 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!
FILL_PARENTwurde veraltet und MATCH_PARENTsollte stattdessen verwendet werden.
MATCH_PARENTkann es anstelle von FILL_PARENTsogar auf älteren Geräten verwendet werden.
FILL_PARENTvs. MATCH_PARENT.
Wenn Sie Ihre Ansicht bereits in Ihrer Layoutdatei (XML) definiert haben und das Gewicht nur programmgesteuert ändern möchten, ist dies besser
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
new a 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, setzen Sie die Breite im Konstruktor auf 0. 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);
childParam2.weight = 0.7f;
child2.setLayoutParams(childParam2);
parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);
Wenn ich jemanden suche, der eine Antwort sucht, benutze dies:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
Wenn Sie Ihr Layout aus einer XML-Datei initialisieren, ist dies viel praktischer als die Bereitstellung neuer Layoutparameter für das lineare Layout.
layout_weightbereits angelegt wurde, müssen Sie View.requestLayout()zum Aktualisieren aufrufen .
Jeder von LinearLayout.LayoutParamsund TableLayout.LayoutParamsarbeitete für mich, für Knöpfe ist der richtige TableRow.LayoutParams. Das ist:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
Über die Verwendung MATCH_PARENToder WRAP_CONTENTgleich sein.
FILL_PARENTwurde veraltet und MATCH_PARENTsollte stattdessen verwendet werden.
LayoutParamsdes direkten Elternteils an. Ich gehe davon aus, dass Sie einen Absturz hatten, bei dem versucht wurde, ihn LinearLayout.LayoutParamsohne die Eltern zu verwenden LinearLayout.
Wenn Sie Ihre Ansicht bereits in der Layoutdatei (XML) definiert haben und das Gewicht nur grammatikalisch ä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 layoutparamsbereits definiert (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)
}
}