Meine Frage ist einfach,
Wie stelle ich meine Schaltflächen layout_gravity programmgesteuert ein?
Ich habe das im Internet gefunden, aber es löst einfach eine Nullpointer-Ausnahme aus:
Button MyButton = new Button(this);
LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
lllp.gravity=Gravity.RIGHT;
MyButton.setLayoutParams(lllp);
MyLinearLayout.addView(MyButton);
Irgendeine Lösungsmöglichkeit?
android
android-layout
Adam Varhegyi
quelle
quelle
Antworten:
Java
Kotlin
Informationen zu den Schwerkraftwerten und zum Einstellen der Schwerkraft finden Sie unter Schwerkraft .
Grundsätzlich sollten Sie die
LayoutParams
je nach Eltern wählen . Es kann seinRelativeLayout
,LinearLayout
etc ...quelle
layout_gravity
(das heißtLayoutParams.gravity
). Dasgravity
wärebutton.setGravity()
setGravity()
die layout_gravity ist, aber das ist falsch. Ich kann bestätigen, dass diese Antwort korrekt ist, um layout_gravity programmgesteuert festzulegen.Ich würde es hassen, alte Threads wiederzubeleben, aber dies ist ein Problem, das nicht richtig beantwortet wird, und außerdem bin ich selbst auf dieses Problem gestoßen.
Wenn Sie nur an der Antwort interessiert sind, scrollen Sie bitte bis zum Code:
android :vity und android: layout_gravity funktionieren unterschiedlich. Hier ist ein Artikel, den ich gelesen habe und der mir geholfen hat.
GIST des Artikels: Die Schwerkraft beeinflusst die Ansicht, nachdem Höhe / Breite zugewiesen wurde. Der Schwerpunkt wirkt sich also nicht auf eine Ansicht aus, die mit FILL_PARENT ausgeführt wird (stellen Sie sich dies als automatischen Rand vor). layout_gravity center wirkt sich auf die Ansicht FILL_PARENT aus (stellen Sie sich das als Auto-Pad vor).
Grundsätzlich kann auf android: layout_gravity NICHT programmgesteuert zugegriffen werden, sondern nur auf android :vity. Im Fall des OP und in meinem Fall platziert die akzeptierte Antwort die Schaltfläche nicht vertikal in der Mitte.
Um Karthis Antwort zu verbessern:
Link zu
LinearLayout.LayoutParams
.android: layout_gravity zeigt "Keine verwandten Methoden" an, was bedeutet, dass nicht programmgesteuert zugegriffen werden kann. Während die Schwerkraft ein Feld in der Klasse ist.
quelle
Verwenden Sie für layout_gravity die Antwort "karthi". Diese Methode legt die Schwerkraft fest, um die Kinder in der Ansicht zu platzieren.
quelle
Ich hatte ein ähnliches Problem beim programmgesteuerten Festlegen von layout_gravity für Schaltflächen in einem GridLayout.
Der Trick bestand darin , Schwerkraft auf der Taste layoutParams AFTER die Taste , um einen Elternteil (Gridlayout) hinzugefügt wurde, da sonst die Schwerkraft außer Acht gelassen werden würde .
quelle
Wenn Sie die
layou_gravity
einer vorhandenen Ansicht ändern möchten, gehen Sie folgendermaßen vor:Denken Sie daran, das Recht
LayoutParams
basierend auf dem Layouttyp zu verwenden, in dem sich Ihre Ansicht befindet. Beispiel:quelle
Verwenden Sie dies, um mehr als eine Schwerkraft hinzuzufügen
quelle
Diese Frage ist alt, aber ich hatte gerade das gleiche Problem und löste es so
quelle
KOTLIN stellt mehr als eine Schwerkraft auf FrameLayout ein, ohne die Größe zu ändern:
quelle
Ich benutze so etwas: (Xamarin und C # Code)
Die SetGravity platziert meine Textansicht in der Mitte des Layouts. So SetGravity Layout - Eigenschaft beziehen sich auf das Layout Inhalt
quelle
Wenn Sie die Schwerkraft für eine Ansicht festlegen müssen, gehen Sie wie folgt vor
Verwenden Sie zum Festlegen von layout_gravity für die Schaltfläche das Schwerkraftfeld für die Layoutparameter als
Versuchen Sie diese Hoffnung, dies klärt Dank
quelle
Der Rest der Antworten ist richtig, ich möchte weitere Erklärungen hinzufügen. In layout_gravity geht es darum, wie die Ansicht in der übergeordneten Ansicht positioniert wird.
Sie müssen die Schwerkraft ** festlegen, nachdem die Methode parentView.addView () ** aufgerufen wurde. Wir können den Code sehen:
Das Problem des Nullzeigers besteht darin, dass addView nicht vor getLayoutParams () aufgerufen wird.
In der Anmerkung wurde bereits gesagt: "Diese Methode gibt möglicherweise null zurück, wenn diese Ansicht nicht an eine übergeordnete ViewGroup angehängt ist oder {@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)} nicht erfolgreich aufgerufen wurde. Wenn eine Ansicht an eine übergeordnete Ansicht angehängt ist ViewGroup, diese Methode darf nicht null zurückgeben. "
quelle
Wenn Sie eine Ansicht in die Mitte des übergeordneten Elements einfügen möchten, können Sie den folgenden Code verwenden.
In diesem Codeabschnitt platziert LinearLayout die ersten Ansichtselemente in der Mitte des übergeordneten Elements. Daher berücksichtigen wir die anfängliche Breite und Höhe nicht, um die Ansicht in der Mitte anzuordnen. Ich mache den Codeabschnitt gut.
quelle
Versuchen Sie diesen Code für RelativeLayout, er funktioniert für mich:
yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
quelle
Perfekt funktionierend !!! Keine der obigen Antworten funktioniert für mich. In der XML-Datei unterscheiden sich die Einstellungen für die Schwerkraft und die Einstellung für layout_gravity. Überprüfen Sie den folgenden Code
Aktivieren Sie auch Dies, wo Sie klare Erklärungen zu Schwerkraft und layout_gravity finden.
quelle
Die meisten der oben genannten Antworten sind richtig. Schreiben Sie daher eine Hilfsmethode, damit Sie sie direkt in Ihrem Projekt verwenden können.
quelle
Ich habe von LinearLayout.LayoutParams zu RelativeLayout.LayoutParams gewechselt, um endlich das gewünschte Ergebnis für eine von mir erstellte benutzerdefinierte Kreisansicht zu erhalten.
Anstelle der Schwerkraft verwenden Sie jedoch addRule
RelativeLayout.LayoutParams mCircleParams = new RelativeLayout.LayoutParams (Kreishöhe, Kreishöhe);
quelle
Versuchen Sie diesen Code
oder
quelle
layout_gravity
nichtgravitiy
.quelle
quelle