Impostare la larghezza e l'altezza di ImageView a livello di codice?


643

Come posso impostare una ImageViewlarghezza e un'altezza a livello di codice?


4
Per quanto strano possa sembrare, questa informazione è piuttosto difficile da trovare. La domanda merita più voti.
— phunehehe,

14
Nota a piè di pagina per chiunque abbia difficoltà con questo proveniente da un'altra piattaforma. l' opzione "dimensioni e forma per adattarsi" è gestita magnificamente in Android; ma è difficile da trovare. in genere si desidera la corrispondenza della larghezza padre, il contenuto dell'altezza, l' attivazione di AdjustViewBounds , il ridimensionamento fitToCenter e cropToPadding false . quindi è automatico. Spero davvero che aiuti qualcuno!
— Fattie,

Risposte:


1101

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();

102
Se stai impostando l'altezza dopo che il layout è già stato "strutturato", assicurati di chiamare image_view.requestLayout ()
— Rhys Davis il

9
e se avessi bisogno di wrap_content?
— Francisco Corrales Morales,

8
Vota perché un giorno eri il mio capo e sto ancora imparando da te Hakim :)
— Sami Eltamawy,

9
@FranciscoCorralesMorales lo usa per wrap_content image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT.. Se il genitore della vista viene LinearLayoutsostituito RelativeLayoutcon esso
— Sami Eltamawy,

39
Quindi, come specificare l' unità ? Come dire che è dp , non sp , ecc.
— Saeed Neamati,

231

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);

7
se inserisco quel codice la mia immagine scompare. perché? ImageView imgLogo = new ImageView (questo); imgLogo.setImageDrawable (logo); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo);
— Mustafa Güven,

3
Grazie per questa risposta, mettimi sulla strada giusta. Come nota aggiuntiva, LinearLayout dovrebbe essere impostato sul tipo di vista padre dell'immagine. Ad esempio, se la visualizzazione dell'immagine è in una galleria, è necessario utilizzare i parametri di layout della Galleria anziché LinearLayout o si avranno eccezioni di cast.
— profexorgeek,

3
@ MustafaGüven Ho avuto lo stesso problema di te, dove il mio ImageViewscompare. 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 ImageViewall'interno di a TableRowin TableLayout, dovresti averlo come TableRow.LayoutParams.
— user2323030,

per elaborare l'utente ($ some_number) -> è necessario creare LayoutParams in base al genitore e impostarli sul figlio (imageView), inoltre requestLayout () non sembra essere necessario al momento della scrittura
— Bamboomy

lol crei nuovi parametri, cattiva risposta, puoi solo ottenere quelli attuali, voglio dire se lo fai (creane di nuovi) allora non hai nemmeno bisogno di xml, quindi crei / aggiungi immagini in modo programmatico ...
— user924

52

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.


Questo va bene per me !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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 (larghezza ,altezza); iv.setLayoutParams (parms);
— Selim Raza,

Perché le persone dichiarano le intvariabili se non verranno riutilizzate altrove? Sembra inutile ma non ne so molto a riguardo.
— n00dles

1
solo per una migliore comprensione @ n00dles ,,, nient'altro
— duggu

36

Ho suonato questo con pixele 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.


1
Come lo farei per un valore specifico di dp (cioè non convertire da px in dp)?
— alxcyl,

@Hiren cosa si intende per getResources (). GetDisplayMetrics () quando leggo il documento, sembra essere DisplayMetrics. Puoi per favore spiegarmi brevemente. Sono nuovo di Android, grazie.
— Srini,

Causato da: java.lang.NullPointerException: tentativo di scrivere nel campo "int android.view.ViewGroup $ LayoutParams.height" su un riferimento a oggetto null
— MD Khali,

16

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.LayoutParamsha 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;
//...

11

È possibile impostare il valore per tutti i casi.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

1
Causato da: java.lang.NullPointerException: tentativo di scrivere nel campo "int android.view.ViewGroup $ LayoutParams.height" su un riferimento a oggetto null
— MD Khali,

8

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));

8

Basta creare un oggetto LayoutParams e assegnarlo a imageView

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);

5
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 ;

3

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);

2

Kotlin

val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()

1

Nello scenario in cui la dimensione del widget deve essere impostata a livello di codice, assicurarsi delle regole seguenti.

  1. Impostare LayoutParam per il layout in cui si sta aggiungendo quella vista . Nel mio caso sto aggiungendo aTableRow così ho dovuto fareTableRow.LayoutParams
  2. Segui questo codice

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);


1
Mi piace questo. Lo sto usando! Grazie.
— n00dles,

0

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.


0
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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.