2010-10-27 19 views
35

Tengo un GridView en mi aplicación Android que tiene una cantidad de ImageViews en él. El espacio en mi pantalla es limitado y quiero que las imágenes ocupen todo el espacio disponible que puedan. Desafortunadamente, GridView siempre deja 5 píxeles de espacio libre en la pantalla alrededor del borde exterior de ImageViews (el espacio entre ImageViews se establece con espaciado horizontal/vertical y se comporta correctamente). El espacio vacío actúa como un margen alrededor de ImageViews, pero no puedo deshacerme de él. ¿Alguien sabe qué está causando este "borde" y cómo puedo deshacerme de él (o al menos hacerlo más pequeño)? Gracias.¿Por qué hay píxeles adicionales en mi Android GridView?

Actualización: Estoy creando ImageViews inflando un archivo .xml en el método getView() de mi clase de adaptador. Aquí está el código XML que estoy inflando:

<ImageView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="#FF00FF" /> 

que define el GridView en mi archivo xml diseño de la siguiente manera:

<GridView 
    android:id="@+id/mygrid" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/abutton" 
    android:layout_marginBottom="8dp" 
    android:numColumns="5" android:background="#FF0000"/> 

Aquí hay una captura de pantalla del problema. El área roja en mi GridView. Las áreas moradas son mis ImageViews. La imagen que se muestra es un simple rectángulo azul con un centro transparente. La imagen tiene 45x45 píxeles (pero solo tiene 30x30 píxeles en mi aplicación, me preocuparé más tarde). El borde rojo alrededor del púrpura es lo que estoy tratando de eliminar.

alt text

Respuesta

67

Gracias por el consejo de todos, pero resulta que la respuesta fue algo que no esperábamos. Los píxeles adicionales fueron causados ​​por el selector que se asignó a mi GridView. Supongo que el selector predeterminado es una imagen de 9 parches que tiene un borde de 5 píxeles a su alrededor. Cuando creé y asigné un parche de 9 con bordes más pequeños (o sin bordes, solo un archivo .png normal), el espacio adicional en mi GridView desapareció.

+10

+1, me salvaste al menos 4 horas de prueba y error. Parece que una forma limpia de especificar "sin imagen" en esta situación es 'android: listSelector =" @ android: id/empty "' – mvds

+0

@mvds android: listSelector = "@ android: id/empty" provocó una excepción. Parece que GridView no puede manejar este listSelector. En su lugar, establecí el selector en un color transparente. – Janusz

+30

@Janusz correcto, en algunos dispositivos '@android: id/empty' provoca un bloqueo. '@android: color/transparent' parece ser la elección correcta. – mvds

0

¿Usted intentó establecer el padding en el ImageView y la horizontalSpacing y verticalSpacing en el GridView a 0?

+0

Gracias. Lo he intentado. No parece estar ayudando. Actualicé mi publicación original para incluir el código de mi GridView e ImageViews. –

+0

¿De qué tamaño son las imágenes que está poniendo en la vista de cuadrícula? son todos iguales? Es posible que deba ajustar cómo se escalan para ocupar todo el espacio. http://developer.android.com/reference/android/widget/ImageView.ScaleType.html Además, mira tu diseño en el visor de jerarquía para ver quién posee ese espacio. –

+0

Logré establecer el color de fondo de mis controles, de modo que pueda ver quién posee el espacio de la pantalla (ver mi pregunta editada). GridView es el propietario, pero el cambio de relleno no reduce el área de propiedad (aunque puede expandirlo). –

0

Intente configurar el layout_height y el layout_width de la vista de la imagen para fill_parent.

iv.setLayoutParams(ViewGroup.LayoutParams(ViewGroup.MATCH_PARENT, ViewGroup.MATCH_PARENT)); 

lo haré dinámicamente, creo.

+0

Tengo que hacer esto para Android 2.1, MATCH_PARENT no existía en ese entonces . Intenté FILL_PARENT y todavía no funcionó. –

+0

MATCH_PARENT = FILL_PARENT, no sé por qué lo cambiaron. –

+4

Lo cambiamos porque 'FILL_PARENT' implicó" llenar * sobrante * de espacio ", que en la gran mayoría de los casos no es el comportamiento real.:) – adamp

0

Para mí nada ayudaron a excepción estableciendo el atributo android:columnWidthen el xml (por ejemplo android:columnWidth="50dp")

Cuestiones relacionadas