Wie kann ich eine ImageView
Breite und Höhe programmatisch zu ändern?
Wenn Sie die Höhe festlegen, nachdem das Layout bereits "angelegt" wurde, müssen Sie image_view.requestLayout() aufrufen.
Wie kann ich eine ImageView
Breite und Höhe programmatisch zu ändern?
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();
Wenn Sie die Höhe festlegen, nachdem das Layout bereits "angelegt" wurde, müssen Sie image_view.requestLayout() aufrufen.
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);
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.
@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
.
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.
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);
Warum erklären die Menschen int
Variablen, wenn sie nicht anderweitig wiederverwendet werden? Scheint unnötig, aber ich weiß nicht viel über sie tbh.
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.
Wie würde ich dies für einen bestimmten dp-Wert tun (d. h. nicht von px in dp konvertieren)?
@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.
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 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.
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!