Come posso impostare una ImageView
larghezza e un'altezza a livello di codice?
Come posso impostare una ImageView
larghezza e un'altezza a livello di codice?
Risposte:
Potrebbe essere troppo tardi, ma per il bene di altri che hanno lo stesso problema, per impostare l'altezza di ImageView:
imageView.getLayoutParams().height = 20;
Spero che sia di aiuto.
Importante. Se stai impostando l'altezza dopo che il layout è già stato "strutturato", assicurati di chiamare anche:
imageView.requestLayout();
image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT
.. Se il genitore della vista viene LinearLayout
sostituito RelativeLayout
con esso
Se la visualizzazione dell'immagine è dinamica, la risposta contenente getLayout avrà esito negativo con eccezione null.
In tal caso il modo corretto è:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
ImageView
scompare. Il trucco è rendere la parte del layout (cioè, <this_part_here>.LayoutParams
) uguale a quella del genitore dell'elemento ImageView
. Quindi, ad esempio, se hai inserito il tuo ImageView
all'interno di a TableRow
in TableLayout
, dovresti averlo come TableRow.LayoutParams
.
Questo semplice modo per svolgere il tuo compito:
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);
e in un altro modo se vuoi dare le dimensioni dello schermo in altezza e larghezza, usa il codice seguente:
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);
spero di usarlo per intero.
int
variabili se non verranno riutilizzate altrove? Sembra inutile ma non ne so molto a riguardo.
Ho suonato questo con pixel
e dp
.
private int dimensionInPixel = 200;
Come impostare per pixel :
view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();
Come impostare da dp :
int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();
Spero che questo ti possa aiutare.
Se devi impostare la tua larghezza o altezza su match_parent
(grande quanto il suo genitore) o wrap_content
(abbastanza grande da adattarsi al suo contenuto interno), allora ViewGroup.LayoutParams
ha queste due costanti:
imageView.setLayoutParams(
new ViewGroup.LayoutParams(
// or ViewGroup.LayoutParams.WRAP_CONTENT
ViewGroup.LayoutParams.MATCH_PARENT,
// or ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.MATCH_PARENT ) );
Oppure puoi impostarli come nella risposta di Hakem Zaied :
imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
È possibile impostare il valore per tutti i casi.
demoImage.getLayoutParams().height = 150;
demoImage.getLayoutParams().width = 150;
demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
Il modo migliore e più semplice per impostare dinamicamente un pulsante è
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());
L'altezza e la larghezza sopra indicate sono in pixel px . 45 è l'altezza in dp e 42 è la larghezza in dp .
index.setLayoutParams(new <Parent>.LayoutParams(width, height));
Quindi, ad esempio, se hai posizionato il tuo pulsante all'interno di un TableRow all'interno di un TableLayout, dovresti averlo come TableRow.LayoutParams
index.setLayoutParams(new TableRow.LayoutParams(width, height));
Basta creare un oggetto LayoutParams e assegnarlo a imageView
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
image_view.getLayoutParams().height
restituisce il valore dell'altezza in pixel. È necessario prima ottenere le dimensioni dello schermo per impostare correttamente i valori.
Display display = context.getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
int screen_height = outMetrics.heightPixels;
int screen_width = outMetrics.widthPixels;
Dopo aver ottenuto le dimensioni dello schermo, è possibile impostare la larghezza e l'altezza della visualizzazione immagine utilizzando i margini adeguati.
view.getLayoutParams().height = screen_height - 140;
view.getLayoutParams().width = screen_width - 130 ;
Per impostare ImageView e l'altezza a livello di codice, è possibile farlo
//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()
Nello scenario in cui la dimensione del widget deve essere impostata a livello di codice, assicurarsi delle regole seguenti.
LayoutParam
per il layout in cui si sta aggiungendo quella vista . Nel mio caso sto aggiungendo aTableRow
così ho dovuto fareTableRow.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);
Se vuoi solo adattare l'immagine alla vista dell'immagine, puoi usare "avvolgi contenuto" in proprietà di altezza e larghezza con il tipo di scala, ma se vuoi impostare manualmente devi usare LayoutParams.
Layoutparams è efficace per impostare l'altezza e la larghezza del layout a livello di codice.
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);