Establecer ImageView ancho y alto mediante programación?

643

¿Cómo puedo configurar ImageViewel ancho y el alto de una mediante programación?

praveenb
fuente
44
Por extraño que parezca, esta información es bastante difícil de encontrar. La pregunta merece más votos a favor.
phunehehe
14
Nota al pie para cualquiera que tenga dificultades con esto desde otra plataforma. la opción "tamaño y forma para adaptarse" se maneja maravillosamente en Android; Pero es difícil de encontrar. por lo general, desea que el ancho coincida con el elemento principal, el contenido de ajuste de altura, ajuste los cuadros de vista activados , ajuste fitToCenter y cropToPadding falso . Entonces es automático. ¡Realmente espero que ayude a alguien!
Fattie

Respuestas:

1101

Puede ser demasiado tarde, pero por el bien de otros que tienen el mismo problema, establecer la altura de ImageView:

imageView.getLayoutParams().height = 20;

Espero que esto ayude.

Importante. Si está configurando la altura después de que el diseño ya se haya 'diseñado', asegúrese de llamar también a:

imageView.requestLayout();
Hakem Zaied
fuente
102
Si está configurando la altura después de que el diseño ya se haya 'diseñado', asegúrese de llamar a image_view.requestLayout ()
Rhys Davis
99
¿Qué pasa si necesito wrap_content?
Francisco Corrales Morales
8
Vota porque un día fuiste mi jefe y todavía estoy aprendiendo de ti Hakim :)
Sami Eltamawy
99
@FranciscoCorralesMorales usa esto para envolver_contenido image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT. Si la vista principal se LinearLayoutreemplaza RelativeLayoutcon ella
Sami Eltamawy
39
Entonces, ¿cómo especificar la unidad ? Cómo decir que es dp , no sp , etc.
Saeed Neamati
231

Si su vista de imagen es dinámica, la respuesta que contiene getLayout fallará con una excepción nula.

En ese caso, la forma correcta es:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
InvulgoSoft
fuente
77
Si pongo ese código, mi imagen desaparece. ¿por qué? ImageView imgLogo = nueva ImageView (esto); imgLogo.setImageDrawable (logo); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo);
Mustafa Güven
3
Gracias por esta respuesta, ponme en el camino correcto. Como nota adicional, LinearLayout debe establecerse en el tipo de vista principal de la imagen. Por ejemplo, si su vista de imagen está en una galería, debe usar los parámetros de diseño de la Galería en lugar de LinearLayout o tendrá excepciones de conversión.
profexorgeek 01 de
3
@ MustafaGüven Tuve el mismo problema que tú, donde mi ImageViewdesaparece. El truco es hacer que la parte del diseño (es decir, <this_part_here>.LayoutParams) sea la misma que la del padre ImageView. Entonces, por ejemplo, si ha colocado su ImageViewdentro de TableRowdentro de a TableLayout, debe tenerlo como TableRow.LayoutParams.
user2323030
para elaborar sobre el usuario ($ some_number) -> necesita crear los LayoutParams de acuerdo con el padre y configurarlos en el hijo (imageView), también requestLayout () no parece ser necesario al momento de escribir
Bamboomy
jaja, creas nuevos parámetros, mala respuesta, solo puedes obtener los actuales, es decir, si lo haces (crear nuevos), entonces ni siquiera necesitas xml, luego también creas / agregas imágenes vistas programáticamente ...
user924
52

Esta forma simple de hacer tu tarea:

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

y de otra manera, si desea dar el tamaño de la pantalla en altura y ancho, use el siguiente código:

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

Espero usarlo por completo.

duggu
fuente
Este es un buen trabajo para mí !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mostrar pantalla = getWindowManager (). GetDefaultDisplay (); ImageView iv = (LinearLayout) findViewById (R.id.left); int ancho = display.getWidth (); // ((display.getWidth () * 20) / 100) int height = display.getHeight (); // ((display.getHeight () * 30) / 100) LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams (width ,altura); iv.setLayoutParams (parms);
Selim Raza el
¿Por qué las personas declaran intvariables si no se reutilizarán en otro lugar? Parece innecesario pero no sé mucho al respecto tbh.
n00dles
1
solo para una mejor comprensión @ n00dles ,,, nada más
duggu
36

He jugado este con pixely dp.

private int dimensionInPixel = 200;

Cómo configurar por píxel :

view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();

Cómo configurar por dp :

int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();

Espero que esto te ayude.

Hiren Patel
fuente
1
¿Cómo haría esto para un valor dp específico (es decir, no convertir de px a dp)?
alxcyl
@Hiren lo que significa getResources (). GetDisplayMetrics () cuando leo el documento, parece ser DisplayMetrics. ¿Puedes explicarme un poco brevemente? Soy nuevo en Android, gracias.
Srini
Causado por: java.lang.NullPointerException: intento de escribir en el campo 'int android.view.ViewGroup $ LayoutParams.height' en una referencia de objeto nulo
MD Khali
16

Si necesita establecer su ancho o alto en match_parent(tan grande como su padre) o wrap_content(lo suficientemente grande como para ajustarse a su propio contenido interno), entonces ViewGroup.LayoutParamstiene estas dos constantes:

imageView.setLayoutParams(
    new ViewGroup.LayoutParams(
        // or ViewGroup.LayoutParams.WRAP_CONTENT
        ViewGroup.LayoutParams.MATCH_PARENT,      
        // or ViewGroup.LayoutParams.WRAP_CONTENT,     
        ViewGroup.LayoutParams.MATCH_PARENT ) );

O puede configurarlos como en la respuesta de Hakem Zaied :

imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
Omar
fuente
11

Puede establecer el valor para todos los casos.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
tienanhcntt2
fuente
1
Causado por: java.lang.NullPointerException: intento de escribir en el campo 'int android.view.ViewGroup $ LayoutParams.height' en una referencia de objeto nulo
MD Khali
8

La mejor y más fácil forma de configurar un botón dinámicamente es

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

La altura y el ancho anteriores están en píxeles px . 45 es la altura en dp y 42 es el ancho en dp .

 index.setLayoutParams(new <Parent>.LayoutParams(width, height));

Entonces, por ejemplo, si ha colocado su botón dentro de un TableRow dentro de un TableLayout, debe tenerlo como TableRow.LayoutParams

 index.setLayoutParams(new TableRow.LayoutParams(width, height));
Ali Kahoot
fuente
8

Simplemente cree un objeto LayoutParams y asígnelo a su imageView

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
Zubair Akber
fuente
5
image_view.getLayoutParams().height 

Devuelve el valor de altura en píxeles. Primero debe obtener las dimensiones de la pantalla para establecer los valores correctamente.

 Display display = context.getWindowManager().getDefaultDisplay();
 DisplayMetrics outMetrics = new DisplayMetrics();
 display.getMetrics(outMetrics);
 int screen_height = outMetrics.heightPixels;
 int screen_width = outMetrics.widthPixels;

Después de obtener las dimensiones de la pantalla, puede establecer el ancho y la altura de la vista de imagen utilizando los márgenes adecuados.

 view.getLayoutParams().height = screen_height - 140;
 view.getLayoutParams().width = screen_width - 130 ;
Vikas
fuente
3

Para configurar el ImageView y la altura de forma programática, puede hacer

            //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);
BharathRao
fuente
2

Kotlin

val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()
William Hu
fuente
1

En el escenario donde el tamaño del widget debe establecerse mediante programación, asegúrese de las siguientes reglas.

  1. Establezca LayoutParam el diseño en el que está agregando esa vista . En mi caso estoy agregando a TableRowlo que tuve que hacerTableRow.LayoutParams
  2. Sigue este código

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

Rohit Mandiwal
fuente
1
Me gusta esto. ¡Lo estoy usando! Gracias.
n00dles
0

Si solo desea ajustar la imagen en la vista de imagen, puede usar "envolver contenido" en la propiedad de alto y ancho con tipo de escala, pero si desea configurarlo manualmente, debe usar LayoutParams.

Layoutparams es eficiente para configurar la altura y el ancho del diseño mediante programación.

raj kavadia
fuente
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);
MEGHA DOBARIYA
fuente