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.