720 Stimmen

ImageView Breite und Höhe programmatisch festlegen?

Wie kann ich eine ImageView Breite und Höhe programmatisch zu ändern?

20 Stimmen

Fußnote für alle, die damit Probleme haben, wenn sie von einer anderen Plattform kommen: Die "Größe und Form nach Maß" Option ist schön in Android gehandhabt; aber es ist schwer zu finden. Sie wollen in der Regel Breite entsprechen Elternteil, Höhe wrap Inhalt, adjustViewBounds eingeschaltet Maßstab fitToCenter und cropToPadding falsch . dann geht das automatisch. Ich hoffe wirklich, dass es jemandem hilft!

1253voto

Hakem Zaied Punkte 13643

Es mag zu spät sein, aber für andere, die das gleiche Problem haben, sollte man die Höhe der ImageView :

imageView.getLayoutParams().height = 20;

Das ist wichtig. Wenn Sie die Höhe festlegen, nachdem das Layout bereits "angelegt" wurde, müssen Sie auch einen Aufruf machen:

imageView.requestLayout();

113 Stimmen

Wenn Sie die Höhe festlegen, nachdem das Layout bereits "angelegt" wurde, müssen Sie image_view.requestLayout() aufrufen.

1 Stimmen

Die Antwort sollte bearbeitet werden, um den Zusatz von @Skripi aufzunehmen

12 Stimmen

Was, wenn ich wrap_content benötige?

260voto

InvulgoSoft Punkte 3133

Wenn Ihre Bildansicht dynamisch ist, wird die Antwort, die getLayout enthält, mit einer Null-Exception fehlschlagen.

In diesem Fall ist der richtige Weg:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);

7 Stimmen

Wenn ich diesen Code einfüge, verschwindet das Bild. Warum? ImageView imgLogo = new ImageView(this); imgLogo.setImageDrawable(logo); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(32,32); imgLogo.setLayoutParams(layoutParams); row.addView(imgLogo);

3 Stimmen

Vielen Dank für diese Antwort, die mich auf die richtige Spur bringt. Als zusätzliche Anmerkung sollte LinearLayout auf den übergeordneten Ansichtstyp des Bildes eingestellt werden. Wenn sich Ihre Bildansicht beispielsweise in einer Galerie befindet, sollten Sie die Gallery-Layout-Parameter anstelle von LinearLayout verwenden, da es sonst zu Casting-Ausnahmen kommt.

3 Stimmen

@MustafaGüven Ich hatte das gleiche Problem wie Sie, bei dem meine ImageView verschwindet. Der Trick besteht darin, den Layout-Teil (d. h., <this_part_here>.LayoutParams ) dasselbe sein, was der Elternteil des ImageView ist. Wenn Sie also zum Beispiel Ihre ImageView innerhalb einer TableRow innerhalb einer TableLayout sollten Sie es als TableRow.LayoutParams .

59voto

duggu Punkte 36991

So einfach können Sie Ihre Aufgabe erledigen:

setContentView(R.id.main);    
ImageView iv = (ImageView) findViewById(R.id.left);
int width = 60;
int height = 60;
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

und eine andere Möglichkeit, wenn Sie die Bildschirmgröße in Höhe und Breite angeben möchten, dann verwenden Sie den unten stehenden Code:

setContentView(R.id.main);    
Display display = getWindowManager().getDefaultDisplay();
ImageView iv = (LinearLayout) findViewById(R.id.left);
int width = display.getWidth(); // ((display.getWidth()*20)/100)
int height = display.getHeight();// ((display.getHeight()*30)/100)
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

hoffen, dass Ihnen der Nutzen voll zugute kommt.

0 Stimmen

So funktioniert es für mich !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Display display = getWindowManager().getDefaultDisplay(); ImageView iv = (LinearLayout) findViewById(R.id.left); int width = display.getWidth(); // ((display.getWidth()*20)/100) int height = display.getHeight();// ((display.getHeight()*30)/100) LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height); iv.setLayoutParams(parms);

0 Stimmen

Warum erklären die Menschen int Variablen, wenn sie nicht anderweitig wiederverwendet werden? Scheint unnötig, aber ich weiß nicht viel über sie tbh.

1 Stimmen

Nur zum besseren Verständnis @n00dles ,,,, sonst nichts

50voto

Hiren Patel Punkte 50526

Ich habe dieses Spiel mit pixel y dp .

private int dimensionInPixel = 200;

Wie wird eingestellt bei Pixel :

view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();

Wie wird eingestellt bei dp :

int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();

Ich hoffe, das hilft Ihnen weiter.

2 Stimmen

Wie würde ich dies für einen bestimmten dp-Wert tun (d. h. nicht von px in dp konvertieren)?

1 Stimmen

@Hiren was bedeutet getResources().getDisplayMetrics() wenn ich das Dokument lese, scheint es DisplayMetrics zu sein. Können Sie mir das bitte kurz erklären. Ich bin neu in Android, danke.

1 Stimmen

Verursacht durch: java.lang.NullPointerException: Versuch, in das Feld 'int Android.view.ViewGroup$LayoutParams.height' auf eine Null-Objektreferenz zu schreiben

20voto

Omar Punkte 15583

Wenn Sie Ihre Breite oder Höhe auf match_parent (so groß wie die Muttergesellschaft) oder wrap_content (groß genug, um seinen eigenen internen Inhalt aufzunehmen), dann ViewGroup.LayoutParams hat diese zwei Konstanten:

imageView.setLayoutParams(
    new ViewGroup.LayoutParams(
        // or ViewGroup.LayoutParams.WRAP_CONTENT
        ViewGroup.LayoutParams.MATCH_PARENT,      
        // or ViewGroup.LayoutParams.WRAP_CONTENT,     
        ViewGroup.LayoutParams.MATCH_PARENT ) );

Oder Sie können sie wie in Hakem Zaieds Antwort :

imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...

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