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?

5voto

user2779311 Punkte 1532

Wenn Sie die Schwerkraft für eine Ansicht einstellen müssen, gehen Sie wie folgt vor

Button b=new Button(Context);
b.setGravity(Gravity.CENTER);

Für die Einstellung von layout_gravity für den Button verwenden Sie das Feld gravity für die layoutparams als

LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER;

Versuchen Sie dies Ich hoffe, das bringt Klarheit danke

3voto

Sai Punkte 14099

Ändern Sie die vorhandenen Layout-Parameter und setzen Sie die Layout-Parameter erneut

//Get the current layout params and update the Gravity
(iv.layoutParams as FrameLayout.LayoutParams).gravity = Gravity.START
//Set layout params again (this updates the view)
iv.layoutParams = layoutParams

3voto

Snow Albert Punkte 511

Der Rest der Antworten ist richtig, ich möchte noch mehr Erklärungen hinzufügen. Bei layout_gravity geht es darum, wie man die Ansicht in der übergeordneten Ansicht positioniert.

Sie müssen die Schwerkraft **nach dem Aufruf der Methode parentView.addView() ** einstellen. Wir können den Code sehen:

public void setLayoutParams(ViewGroup.LayoutParams params) {
    if (params == null) {
        throw new NullPointerException("Layout parameters cannot be null");
    }
    mLayoutParams = params;
    resolveLayoutParams();
    if (mParent instanceof ViewGroup) {
        ((ViewGroup) mParent).onSetLayoutParams(this, params);
    }
    requestLayout();
}

Und das Problem der Null-Zeiger ist, weil es nicht Aufruf addView vor getLayoutParams().

Die Anmerkung lautete bereits "Diese Methode kann null zurückgeben, wenn diese View nicht an eine übergeordnete ViewGroup angehängt ist oder {@link#setLayoutParams(Android.view.ViewGroup.LayoutParams)} nicht erfolgreich aufgerufen wurde. Wenn eine View an eine übergeordnete ViewGroup angehängt ist, darf diese Methode nicht null zurückgeben."

2voto

michael wang Punkte 553

Zu RelativeLayout, versuchen Sie diesen Code, es funktioniert für mich: yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

2voto

Tara Punkte 2500

Funktioniert einwandfrei!!! Keine der oben genannten Antworten funktioniert für mich. In der Xml-Datei ist die Einstellung der Schwerkraft und die Einstellung von layout_gravity unterschiedlich. Sehen Sie sich den folgenden Code an

// here messageLL is the linear layout in the xml file
// Before adding any view just remove all views
   messageLL.removeAllViews();
// FrameLayout is the parent for LinearLayout
FrameLayout.LayoutParams params = new 
   FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
   params.gravity = Gravity.CENTER|Gravity.CENTER_VERTICAL;
   messageLL.setLayoutParams(params);
   messageText.setVisibility(View.GONE);
   messageNoText.setVisibility(View.VISIBLE);
   messageLL.addView(messageNoText);

Prüfen Sie auch Hier finden Sie klare Erklärungen zu Schwerkraft und layout_gravity .

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