¿Establecer el ancho y alto de ImageView mediante programación?

¿Cómo puedo configurar un ImageView's ancho y alto programáticamente?

preguntado el 29 de junio de 10 a las 18:06

Nota a pie de página para cualquiera que esté luchando con esto desde otra plataforma. la "tamaño y forma para adaptarse" La opción se maneja maravillosamente en Android; pero es difícil de encontrar. por lo general, desea que el ancho coincida con el padre, el contenido de ajuste de altura, AdjustViewBounds activado, escala ajuste al centro y cropToPadding false. entonces es automático. ¡Realmente espero que ayude a alguien! -

15 Respuestas

Puede que sea demasiado tarde, pero por el bien de otras personas que tienen el mismo problema, establecer la altura del ImageView:

imageView.getLayoutParams().height = 20;

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

imageView.requestLayout();

Respondido 20 Jul 20, 19:07

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

¿Qué pasa si necesito wrap_content? - Francisco Corrales Morales

@FranciscoCorralesMorales usa esto para wrap_content image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT .. Si el padre de la vista es LinearLayout Reemplace la RelativeLayout con eso - Sami Eltamawy

Entonces, ¿cómo especificar el unidad? Como decir que es dpno, sp, etc - Saeed Neamati

@SaeedNeamati, es px. Para convertir dp a px use métodos, por ejemplo, en stackoverflow.com/questions/4605527/converting-pixels-to-dp. - CoolMind

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

respondido 26 mar '12, 18:03

si pongo ese código mi imagen desaparece. ¿Por qué? ImageView imgLogo = nuevo ImageView (esto); imgLogo.setImageDrawable (logo); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo); - Mustafa Guven

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 Galería en lugar de LinearLayout o tendrá excepciones de transmisión. - profexorgeek

@ MustafaGüven Tuve el mismo problema que tú, donde mi ImageView desaparece. El truco consiste en hacer que la parte del diseño (es decir, <this_part_here>.LayoutParams) ser el mismo que el padre del ImageView es. Entonces, por ejemplo, si ha colocado su ImageView dentro de un TableRow dentro de un TableLayout, deberías tenerlo como TableRow.LayoutParams. - user2323030

para dar más detalles sobre el usuario ($ some_number) -> necesitas Para crear LayoutParams según el padre y planificadas ellos en el niño (el imageView), también requestLayout () no parece ser necesario al momento de escribir - Bambú

jajaja, creas nuevos parámetros, mala respuesta, solo puedes obtener los actuales, quiero decir, si lo haces (crea nuevos), entonces ni siquiera necesitas xml, entonces también crea / agrega imageview programáticamente ... - user924

Esta forma sencilla de hacer su 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 alto 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 para ti.

Respondido el 11 de enero de 13 a las 08:01

Este es un buen trabajo para mí !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mostrar pantalla = getWindowManager (). GetDefaultDisplay (); ImageView iv = (LinearLayout) findViewById (R.id.izquierda); int ancho = display.getWidth (); // ((display.getWidth () * 20) / 100) int height = display.getHeight (); // ((display.getHeight () * 30) / 100) LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams (ancho ,altura); iv.setLayoutParams (parms); - Selim raza

¿Por qué la gente declara int variables si no se reutilizarán en otro lugar? Parece innecesario pero no sé mucho al respecto tbh. - n00dles

solo para comprender mejor @ n00dles ,,, nada más - duggu

He jugado este con pixel y 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.

contestado el 24 de mayo de 16 a las 10:05

¿Cómo haría esto para un valor de 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

Si necesita establecer su ancho o alto en match_parent (tan grande como su padre) o wrap_content (lo suficientemente grande para adaptarse a su propio contenido interno), luego ViewGroup.LayoutParams tiene 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 Hakem Zaied's https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be:

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

contestado el 23 de mayo de 17 a las 13:05

Puede establecer un valor para todos los casos.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

Respondido 27 Jul 16, 15:07

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

La mejor y más sencilla forma de configurar un botón de forma dinámica 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 siendo la altura en dp y 42 siendo 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, debería tenerlo como TableRow.LayoutParams

 index.setLayoutParams(new TableRow.LayoutParams(width, height));

Respondido el 06 de diciembre de 15 a las 09:12

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

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

Respondido el 05 de enero de 16 a las 06:01

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 la imagen utilizando los márgenes adecuados.

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

Respondido 01 Oct 15, 06:10

Para configurar ImageView y Height de manera programada, 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);

Respondido 01 Abr '19, 10:04

kotlin

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

respondido 13 mar '20, 06:03

image.setLayoutParams (nuevo ViewGroup.LayoutParams (ancho, alto));

ejemplo:

image.setLayoutParams(new ViewGroup.LayoutParams(150, 150));

Respondido 14 Oct 20, 07:10

En el caso de que el tamaño del widget deba establecerse mediante programación, asegúrese de las siguientes reglas.

  1. Kit LayoutParam para el diseño en el que está agregando esa vista. En mi caso estoy agregando TableRow así que tuve que hacer TableRow.LayoutParams
  2. Siga 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);

Respondido el 21 de diciembre de 18 a las 01:12

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

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

respondido 05 mar '19, 13:03

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

contestado el 07 de mayo de 20 a las 09:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.