Wie setzt man LayoutParams () für eine ImageView?


77

Ich möchte das LayoutParamsfür ein einstellen, ImageViewaber ich kann nicht herausfinden, wie es richtig ist.

Ich kann nur Dokumentation in der API für die verschiedenen finden ViewGroups, aber keine ImageView. Dennoch ImageViewscheint das diese Funktionalität zu haben.

Dieser Code funktioniert nicht ...

myImageView.setLayoutParams(new ImageView.LayoutParams(30,30));

Wie mache ich es?

Antworten:


167

Sie müssen die LayoutParams der ViewGroup festlegen, in der sich die ImageView befindet. Befindet sich Ihre ImageView beispielsweise in einem LinearLayout, erstellen Sie eine

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

Dies liegt daran, dass das übergeordnete Element der Ansicht wissen muss, welche Größe der Ansicht zugewiesen werden soll.


2
Weißt du ... was du gesagt hast hat funktioniert. Aber ich hatte dieses Konzept bereits verstanden, machte aber einen großen Fehler. Sie sehen, ich hatte meine ImageViews in einem TableLayout ... also habe ich TableLayout.setLayoutParams verwendet. Aber es würde abstürzen. Wenn ich tiefer darüber nachdachte, musste ich einen Drilldown zu TableRow.setLayoutParams durchführen, damit es endlich funktioniert. Danke, dass du mein Gehirn zum Laufen gebracht hast. Das 'sitzt drin' hat es für mich ausgelöst ... ich muss dieses Zeug dumm machen.
DeadTime

21
Es freut mich, dass ich helfen konnte. Wenn Ihr Problem gelöst ist, können Sie dies als akzeptierte Antwort markieren? Es ist das Häkchen links neben dem Text.
Steve Haley

Hallo @SteveHaley, die Breiten- und Höhenparameter hier sind in Pixel richtig? Meine Erfahrung zeigt das und es ist schockierend leer hier: developer.android.com/reference/android/widget/… , int)
ericn

2
@fuzzybee Ich denke, es ist in Pixel ... Die meisten im Code festgelegten Layout-Inhalte sind Pixel und nicht DP. Konvertieren Sie Pixel in DP mit etwas wieTypedValue.applyDimension(TypedValue.ComplexUnit_DP, 30, getResources().getDisplayMetrics())
Steve Haley

19

Alter Thread, aber ich hatte jetzt das gleiche Problem. Wenn jemand darauf stößt, wird er wahrscheinlich diese Antwort finden:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

Dies funktioniert nur, wenn Sie die ImageView als Unteransicht zu einem LinearLayout hinzufügen. Wenn Sie es einem RelativeLayout hinzufügen, müssen Sie Folgendes aufrufen:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

12

Wenn Sie das Layout einer vorhandenen ImageView ändern, sollten Sie in der Lage sein, einfach die aktuellen LayoutParams abzurufen, die Breite / Höhe zu ändern und sie zurückzusetzen:

android.view.ViewGroup.LayoutParams layoutParams = myImageView.getLayoutParams();
layoutParams.width = 30;
layoutParams.height = 30;
myImageView.setLayoutParams(layoutParams);

Ich weiß nicht, ob das Ihr Ziel ist, aber wenn ja, ist dies wahrscheinlich die einfachste Lösung.


Ist es notwendig, die LayoutParams mit neu zuzuweisen myImageView.setLayoutParams(layoutParams);? Da Sie den Verweis auf die LayoutParams ändern, sollte dies nicht der Fall sein.
Vince

6

Eine ImageView erhält setLayoutParams von View, das ViewGroup.LayoutParams verwendet. Wenn Sie das verwenden, stürzt es in den meisten Fällen ab, daher sollten Sie getLayoutParams () verwenden, das sich in View.class befindet. Dies erbt die übergeordnete Ansicht der ImageView und funktioniert immer. Sie können dies hier bestätigen: ImageView erweitert die Ansicht

Angenommen, Sie haben eine ImageView als ' image_view ' und die Breite / Höhe int als 'thumb_size' definiert.

Der beste Weg, dies zu tun :

ViewGroup.LayoutParams iv_params_b = image_view.getLayoutParams();
iv_params_b.height = thumb_size;
iv_params_b.width = thumb_size;
image_view.setLayoutParams(iv_params_b);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.