Wie kann ich die ImageView
Breite und Höhe eines Programms programmgesteuert einstellen ?
Wie kann ich die ImageView
Breite und Höhe eines Programms programmgesteuert einstellen ?
Antworten:
Es kann zu spät sein, aber für andere, die das gleiche Problem haben, die Höhe der ImageView festzulegen:
image_view.getLayoutParams().height = 20;
Hoffe das hilft.
Wichtig. Wenn Sie die Höhe einstellen, nachdem das Layout bereits angelegt wurde, rufen Sie auch Folgendes auf:
image_view.requestLayout()
image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT
.. Wenn das übergeordnete Element der Ansicht LinearLayout
durch das ersetzt RelativeLayout
wird
Wenn Ihre Bildansicht dynamisch ist, schlägt die Antwort mit getLayout mit einer Null-Ausnahme fehl.
In diesem Fall ist der richtige Weg:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
ImageView
verschwindet. Der Trick besteht darin, den Layout-Teil (dh <this_part_here>.LayoutParams
) so zu gestalten, wie er dem übergeordneten Teil des ImageView
ist. Wenn Sie beispielsweise Ihr ImageView
innerhalb eines TableRow
innerhalb eines platziert haben TableLayout
, sollten Sie es als haben TableRow.LayoutParams
.
Diese einfache Möglichkeit, Ihre Aufgabe zu 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, verwenden Sie den folgenden 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);
hoffe, nutzen Sie voll für Sie.
int
Variablen, wenn sie nicht anderweitig wiederverwendet werden? Scheint unnötig, aber ich weiß nicht viel darüber.
Ich habe dieses mit pixel
und gespielt dp
.
private int dimensionInPixel = 200;
So stellen Sie nach Pixel ein :
view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();
So stellen Sie mit dp ein :
int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();
Hoffe das würde dir helfen.
Wenn Sie Ihre Breite oder Höhe auf match_parent
(so groß wie das übergeordnete Element) oder wrap_content
(groß genug, um auf den eigenen internen Inhalt zu passen ) einstellen müssen, haben Sie ViewGroup.LayoutParams
diese beiden 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 einstellen :
imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
Sie können den Wert für alle Fälle festlegen.
demoImage.getLayoutParams().height = 150;
demoImage.getLayoutParams().width = 150;
demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
Der beste und einfachste Weg, eine Schaltfläche dynamisch einzustellen, ist
Button index=new Button(this);
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45, getResources().getDisplayMetrics());
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 42, getResources().getDisplayMetrics());
Die oben angegebene Höhe und Breite sind in Pixel px angegeben . 45 ist die Höhe in dp und 42 ist die Breite in dp .
index.setLayoutParams(new <Parent>.LayoutParams(width, height));
Wenn Sie beispielsweise Ihre Schaltfläche in einer TableRow in einem TableLayout platziert haben, sollten Sie sie als TableRow.LayoutParams haben
index.setLayoutParams(new TableRow.LayoutParams(width, height));
Erstellen Sie einfach ein LayoutParams-Objekt und weisen Sie es Ihrer imageView zu
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
image_view.getLayoutParams().height
Gibt den Höhenwert in Pixel zurück. Sie müssen zuerst die Bildschirmabmessungen ermitteln, um die Werte richtig einzustellen.
Display display = context.getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
int screen_height = outMetrics.heightPixels;
int screen_width = outMetrics.widthPixels;
Nachdem Sie die Bildschirmabmessungen erhalten haben, können Sie die Breite und Höhe der Bildansicht mit den richtigen Rändern festlegen.
view.getLayoutParams().height = screen_height - 140;
view.getLayoutParams().width = screen_width - 130 ;
Um ImageView und Höhe programmgesteuert einzustellen, können Sie dies tun
//Makesure you calculate the density pixel and multiply it with the size of width/height
float dpCalculation = getResources().getDisplayMetrics().density;
your_imageview.getLayoutParams().width = (int) (150 * dpCalculation);
//Set ScaleType according to your choice...
your_imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
Kotlin
val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()
Stellen Sie in dem Szenario, in dem die Widgetgröße programmgesteuert festgelegt werden muss, die folgenden Regeln sicher.
LayoutParam
das Layout fest, in dem Sie diese Ansicht hinzufügen . In meinem Fall füge ich hinzu, TableRow
also musste ich tunTableRow.LayoutParams
final float scale = getResources().getDisplayMetrics().density;
int dpWidthInPx = (int) (17 * scale);
int dpHeightInPx = (int) (17 * scale);
TableRow.LayoutParams deletelayoutParams = new TableRow.LayoutParams(dpWidthInPx, dpHeightInPx);
button.setLayoutParams(deletelayoutParams);
tableRow.addView(button, 1);
Wenn Sie das Bild nur in die Bildansicht einpassen möchten, können Sie "Inhalt umbrechen" in der Eigenschaft "Höhe und Breite" mit Skalierungstyp verwenden. Wenn Sie jedoch manuell festlegen möchten, müssen Sie LayoutParams verwenden.
Layoutparams ist effizient, um die Höhe und Breite des Layouts programmgesteuert einzustellen.
int newHeight = 150;
int newWidth = 150;
holder.iv_arrow.requestLayout();
holder.iv_arrow.getLayoutParams().height = newHeight;
holder.iv_arrow.getLayoutParams().width = newWidth;
holder.iv_arrow.setScaleType(ImageView.ScaleType.FIT_XY);
holder.iv_arrow.setImageResource(R.drawable.video_menu);