2012-05-23 9 views
5

Tengo un calendario basado en GridView. Tengo el siguiente diseño XML con el selector establecido en nulo así android:listSelector="@null" de acuerdo con los consejos que he recibido de este sitio. Ahora estoy obteniendo unos pocos píxeles de ancho a la derecha de GridView. ¿Por qué? He intentado todo lo que puedo pero aprovechar. Aquí es mi diseño XML:Android GridView imperfection, cómo eliminar espacio en blanco adicional a la derecha

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <GridView 
       android:id="@+id/calendar" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent" 
       android:horizontalSpacing="-1px" 
       android:numColumns="7" 
       android:stretchMode="columnWidth" 
       android:gravity="center" 
       android:verticalSpacing="-1px" 
       android:listSelector="@null" > 

      </GridView> 

     </LinearLayout> 

Lo que yo entiendo es esta imagen:

enter image description here

+0

¿Quizás sea un problema de la barra de desplazamiento? Intente configurar la visibilidad de la barra de desplazamiento en falso. – Demonick

+0

¿Has intentado cambiar el espaciado horizontal de -1 a 0? – matt5784

+1

@Demonick, probé la cuestión de la barra de desplazamiento y no funcionó. Ver la respuesta de 'dinesh sharma' a continuación parece tener sentido. – Lukuluba

Respuesta

6

Este espacio se debe a un cálculo imperfecto para cada fila de la cuadrícula. Por ejemplo, el ancho de su dispositivo es de 320 px y tiene 7 filas, pruebe cualquier cálculo que cumpla con 320 px. Si el ancho de cada celda es 45.71428571428571 px, solo entonces se puede reducir.

Otra opción

aplicar androide: gravedad = "centro" propiedad en ti cuadrícula de modo que los espacios se distribuyen por igual de izquierda a derecha

+0

Yah, usted tienen razón @ dinesh-sharma. En modo paisaje, la brecha casi desaparece, lo que demuestra que el problema está relacionado con las dimensiones de la pantalla. Sin embargo, no he conseguido que el 'android: gravity =" center "' funcione. Sin embargo, eso parece bastante trivial. ¡Gracias! – Lukuluba

+0

Probé las soluciones 'android: gravity =" center "' and 'android: layout_gravity =" center "' y no funcionaron. Tengo una solución de compromiso en la que se especifica el ancho de las columnas en el código de modo que su ancho combinado sea mayor que el ancho de la pantalla de la demanda. Esto fuerza a las columnas a llenar la pantalla, pero la última columna se recorta ligeramente, no muy bien si tiene un borde porque el borde desaparece. El con se especifica así: [enlace] http://bytecapsule.blogspot.com/2011/08/android-empty-space-to-right-of.html (ByteCapsule) – Lukuluba

0

Trate de usar

android:layout_margin="0dp" 
android:padding="0dp" 

También es posible que tenga que el espacio asignado para la barra de desplazamiento.
¿Y por qué tiene su espacio vertical y horizontal con valores negativos?

0

he tenido el mismo problema, aunque en mi caso no tenía control sobre la instancia GridView por lo que no pude leer el ancho de la columna. Sin embargo, podría subclasificar su contenedor.
Esto no es muy ortodoxo, pero puede anular el método onMeasure y agregar algunos píxeles.
Algo como esto:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    final int RIGHT_MARGIN_OVERSIZE_DIP = 6; 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    int width = this.getMeasuredWidth() 
    int overSize = (int)((getResources().getDisplayMetrics().density*RIGHT_MARGIN_OVERSIZE_DIP) + 0.5f); 
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(width + overSize, MeasureSpec.getMode(widthMeasureSpec));   
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
3

en mi caso tenía espaciado horizontal como 1DP

android:horizontalSpacing="1dp" 

manera de resolver este acabo de poner el relleno derecho como -1dp

android:paddingRight="-1dp" 

aunque Esperaba obtener un espacio en el lado izquierdo debido a esto, pero funcionó correctamente

+0

Tenía horizontalSpacing = "0dp" y esta solución me ayudó de todos modos. El espacio vacío se ha ido. –

+1

@Rempelos si mal no recuerdo, el número en el paddingRight debe ser -Espacing horizontal, por lo que si tiene un espaciado horizontal de 2dp, entonces su paddingRight debe ser -2 – Jimmar

+1

@JiMMaR en realidad está en lo correcto. Confundí este caso con el mío donde tenía 'horizontalSpacing =" 0dp "' y aun así el espacio extra apareció a la derecha, pero al agregar solo 'paddingRight =" - 1dp "' lo arregló. – Rempelos

0
grid.setColumnWidth(grid.getColumnWidth()+1); 

Esto obtendrá el ancho de columna actual y le agregará 1 píxel. Recuerde utilizar esto después de onCreateView, ya que la cuadrícula debe inicializarse antes de eso.

Además, su vista de cuadrícula debe usar match_parent (alto y ancho). La imagen/diseño en la columna también debe ser match_parent.

Cuestiones relacionadas