Establecer ImageView ancho y alto mediante programación?


643

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


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

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

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.


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.


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

11

Puede establecer el valor para todos los casos.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

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

8

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

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

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 ;

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

2

Kotlin

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

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


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.


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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.