404 Stimmen

Wie kann man layout_gravity programmatisch einstellen?

Meine Frage ist einfach,

Wie kann ich meine Schaltflächen layout_gravity programmatisch einstellen?

Ich fand dies im Internet, aber es wirft mich einfach eine Nullpointer-Ausnahme:

 Button MyButton = new Button(this);

    LinearLayout.LayoutParams  lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
    lllp.gravity=Gravity.RIGHT;
    MyButton.setLayoutParams(lllp); 

    MyLinearLayout.addView(MyButton);

Gibt es eine Lösung?

622voto

Karthi Punkte 13316

Java

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
params.gravity = Gravity.TOP;

button.setLayoutParams(params);

Kotlin

val params = LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT,
    LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
    weight = 1.0f
    gravity = Gravity.TOP
}

Für Schwerkraftwerte und die Einstellung der Schwerkraft siehe Schwerkraft .

Grundsätzlich sollten Sie die LayoutParams je nach Elternteil. Es kann sein RelativeLayout , LinearLayout usw...

64voto

Uknight Punkte 691

Ich möchte ungern alte Threads wiederbeleben, aber dieses Problem wird nicht richtig beantwortet, und außerdem bin ich selbst schon auf dieses Problem gestoßen.

Hier ist der lange Teil, wenn Sie nur an der Antwort interessiert sind, scrollen Sie bitte ganz nach unten zum Code:

Android:gravity und Android:layout_gravity funktionieren unterschiedlich. Hier Das ist ein Artikel, den ich gelesen habe und der mir geholfen hat.

GIST des Artikels: Die Schwerkraft wirkt sich auf die Ansicht aus, nachdem die Höhe/Breite zugewiesen wurde. Der Schwerpunkt wirkt sich also nicht auf eine Ansicht aus, die mit FILL_PARENT erstellt wurde (denken Sie an den automatischen Rand). layout_gravity center wirkt sich auf eine Ansicht aus, die mit FILL_PARENT erstellt wurde (denken Sie an das automatische Pad).

Grundsätzlich kann auf Android:layout_gravity NICHT programmatisch zugegriffen werden, nur auf Android:gravity. Im Fall des Auftraggebers und in meinem Fall platziert die akzeptierte Antwort die Schaltfläche nicht vertikal zentriert.

Um die Antwort von Karthi zu verbessern:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
button.setLayoutParams(params);

Link a LinearLayout.LayoutParams .

Android:layout_gravity zeigt "No related methods" an, was bedeutet, dass kein programmatischer Zugriff möglich ist. Die Schwerkraft ist hingegen ein Feld in der Klasse.

23voto

owjsub Punkte 231

Ich hatte ein ähnliches Problem mit der programmatischen Einstellung layout_gravity auf Schaltflächen in einem GridLayout.

Der Trick war, die Schwerkraft auf die Schaltfläche layoutParams NACH die Schaltfläche wurde zu einem übergeordneten Element (GridLayout) hinzugefügt, sonst würde die Schwerkraft ignoriert werden .

grid.addView(button)
((GridLayout.LayoutParams)button.getLayoutParams()).setGravity(int)

20voto

Yashwanth Kumar Punkte 28491
MyButton.setGravity(Gravity.RIGHT);

Für layout_gravity verwenden Sie die von "karthi" angegebene Antwort. Diese Methode legt die Schwerkraft fest, um die Kinder innerhalb der Ansicht zu platzieren.

19voto

Omar Alnajjar Punkte 357
layoutParams2.gravity = Gravity.RIGHT|Gravity.BOTTOM;

verwenden Sie dies, um mehr als eine Schwerkraft hinzuzufügen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X