2010-06-03 13 views
65

Quiero configurar el LayoutParams para un ImageView pero parece que no puede encontrar la forma correcta de hacerlo.¿Cómo configura setLayoutParams() para un ImageView?

Solo puedo encontrar documentación en la API para los diversos ViewGroups, pero no en ImageView. Sin embargo, el ImageView parece tener esta funcionalidad.

Este código no funciona ...

myImageView.setLayoutParams(new ImageView.LayoutParams(30,30)); 

¿Cómo lo hago?

Respuesta

147

Es necesario configurar los LayoutParams del ViewGroup ImageView está sentado en. Por ejemplo si su ImageView está dentro de un LinearLayout, a continuación, se crea un

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30); 
yourImageView.setLayoutParams(layoutParams); 

Esto se debe a que es el padre de la opinión de que necesita saber qué tamaño asignar a la Vista.

+2

Ya sabes ... lo que dijiste funcionó. Pero ya había comprendido ese concepto pero estaba cometiendo un gran error. Verá que tenía mis ImageViews en TableLayout ... así que estaba usando TableLayout.setLayoutParams. Pero se estrellaría. Cuando lo pensé más detenidamente, necesité profundizar en TableRow.setLayoutParams para que finalmente funcionara. Gracias por hacer que mi cerebro funcione el 'está sentado' lo desencadenó ... tengo que dejar estas cosas patas arriba. – DeadTime

+20

Me alegro de poder ayudar. Si su problema está resuelto, ¿podría marcarlo como la respuesta aceptada? Es el tickmark a la izquierda del texto. –

+0

Hola @SteveHaley, los parámetros de ancho y alto aquí están en píxeles ¿no? Mi experiencia lo muestra y está sorprendentemente en blanco aquí: http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#LinearLayout.LayoutParams(int, int) – ericn

14

Tema viejo pero tuve el mismo problema ahora. Si alguien se encuentra con esto que probablemente va a encontrar esta respuesta:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30); 
yourImageView.setLayoutParams(layoutParams); 

Esto funcionará sólo si se agrega el ImageView como subvista a un LinearLayout. Si se agrega a una RelativeLayout tendrá que llamar:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30, 30); 
yourImageView.setLayoutParams(layoutParams); 
4

Si va a modificar el diseño de una ImageView existente, debe ser capaz de conseguir simplemente los LayoutParams actuales, cambia la anchura/altura, y volver a configurarlo:

android.view.ViewGroup.LayoutParams layoutParams = myImageView.getLayoutParams(); 
layoutParams.width = 30; 
layoutParams.height = 30; 
myImageView.setLayoutParams(layoutParams); 

No sé si ese es su objetivo, pero si lo es, esta es probablemente la solución más fácil.

6

Un ImageView obtiene setLayoutParams de Vista que usa ViewGroup.LayoutParams. Si usa eso, se bloqueará en la mayoría de los casos, por lo que debería usar getLayoutParams() que se encuentra en View.class. Esto heredará la vista principal de ImageView y funcionará siempre. Puede confirmarlo aquí: ImageView extends view

Asumiendo que tiene un ImageView definido como 'image_view' y la int anchura/altura definida como 'thumb_size'

La mejor manera de hacer esto:

ViewGroup.LayoutParams iv_params_b = image_view.getLayoutParams(); 
iv_params_b.height = thumb_size; 
iv_params_b.width = thumb_size; 
image_view.setLayoutParams(iv_params_b); 
Cuestiones relacionadas