Android view layout_width - wie programmgesteuert ändern?

69

Dies ist meine Ansicht und ich möchte layout_width in "10dip" ändern. Wie mache ich das programmgesteuert? Beachten Sie, dass dies kein LinearLayout ist, sondern eine Ansicht.

<View 
    android:id="@+id/nutrition_bar_filled" 
    android:background="@drawable/green_rectangle" 
    android:layout_height="30dp"
    android:layout_width="50dp"/>       

Ich kenne LayoutParams. Wie verwende ich es, um die Breite auf 10dip einzustellen?

Henley Chiu
quelle

Antworten:

163

Ich glaube, Ihre Frage ist, nur die Breite der Ansicht dynamisch zu ändern, während die oben genannten Methoden die Layout-Eigenschaften vollständig in neue ändern. Ich empfehle daher, zuerst LayoutParams () aus der Ansicht zu entfernen, dann die Breite für layoutParams festzulegen und schließlich layoutParams für die Ansicht festzulegen. Führen Sie die folgenden Schritte aus, um dasselbe zu tun.

View view = findViewById(R.id.nutrition_bar_filled);
LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = newWidth;
view.setLayoutParams(layoutParams);
jeet
quelle
19
Sie können auch einfach "view_instance.getLayoutParams (). Width = newOne;"
Tony Wickham
18
Um Werte wie zu erhalten match_parent, funktioniert dies:LayoutParams.MATCH_PARENT
Gene Bo
@ Snayde Ich glaube, das Festlegen der Breiten- und Höhenparameter der LayoutParams der Ansicht führt dazu, dass sie erneut gemessen und angeordnet werden
Tony Wickham
@ TonyWickham hat sich die Implementierung der View-Klasse angesehen und nicht verstanden, wie das geht :(
sergey.n
16

Sie können Höhe und Breite auch folgendermaßen einstellen:

viewinstance.setLayoutParams(new LayoutParams(width, height));
Shankar Agarwal
quelle
13
Ich denke, dies ist der falsche Ansatz, es wird alle anderen Layout-Attribute verlieren, die festgelegt wurden, z. B. layout_gravity
mwk
11

Oder einfach:

view.getLayoutParams().width = 400;
view.requestLayout();
M. Usman Khan
quelle
8

versuchen Sie es mit

View view_instance = (View)findViewById(R.id.nutrition_bar_filled);
view_instance.setWidth(10);

Verwenden Sie dazu Layoutparams , wo Sie Breite und Höhe wie unten einstellen können.

LayoutParams lp = new LayoutParams(10,LayoutParams.wrap_content);
View_instance.setLayoutParams(lp);
Shankar Agarwal
quelle
könntest Du das erläutern? Ich bin fast bereit, Sie als richtige Antwort zu markieren. Wie bekomme ich view_instance?
Henley Chiu
@ Hisoka verwenden findViewById(R.id.nutrition_bar_filled), um die Ansicht zu erhalten
Chris Thompson
Das ist das erste, was ich versucht habe. Schien sehr intuitiv zu sein, aber setWidth ist keine gültige Funktion für eine Ansicht. View filledBar = rowView.findViewById (R.id.nutrition_bar_filled); fillBar.setWidth (10) <- ungültig.
Henley Chiu
3
Die Methode setWidth (int) ist für den Typ View
Henley Chiu
Ok, ich habe meine Frage verfeinert. Ich kenne bereits Layout-Parameter. Meine Frage ist, wie ich Layoutparameter verwende, um die Breite meiner Ansicht auf "10dip" zu setzen. Wenn ich die Dokumentation online lese, ist das für mich nicht so offensichtlich.
Henley Chiu