2012-02-03 6 views
5

Como parece, la GridLayout siempre empujará a sus hijos a la disposición correspondiente a sus necesidades. por ejemplo, la siguiente declaración:GridLayout empuja hacia abajo sus hijos y se desborda cuando se le da fill_parent para la altura

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnCount="3" 
    android:orientation="vertical" 
    android:rowCount="4" 
    android:useDefaultMargins="true" > 
... 
    <ImageView 
     android:id="@+id/main_image" 
     android:layout_column="1" 
     android:layout_columnSpan="2" 
     android:layout_row="3" 
     android:scaleType="fitStart" /> 
</GridLayout> 

El GridLayout declara fill_parent y como tal yo esperaría que no se desborde. El GridLayout debe tomar el tamaño del elemento principal, que en este caso es la ventana (altura completa). Sin embargo, en el visor de jerarquía, el GridLayout se establece como Wrap_content tanto vertical como horizontal.

Como tal, ImageView (que es una imagen de gran tamaño) o cualquier vista de texto se empujará para ajustarse a sí mismo y, como tal, desbordará el contenedor.

Esto se puede ver en el visor de jerarquía en la vista de cuadrícula contenedor se ajusta a los padres:

container grid view

mientras que la vista de la imagen desbordamiento

image view

lectura de la documentación, entiendo hay una necesidad de establecer la gravedad. Por lo que puedo probar, utilicé todo tipo de opciones de gravedad y opciones de escala de imagen sin mucho efecto. La eliminación de los márgenes con useDefaultMargins="false" cambia el desbordamiento de la disposición, lo que lleva el problema hacia la distribución de la rejilla.

Mi pregunta siguiente:

  • Es esto un error o estoy usando el GridLayout incorrectamente
  • ¿Cómo puedo forzar a los niños de la GridLayout para adaptarse a su contenedor y para llenar espacios restantes
+0

ver este http://developer.android.com/resources/tutorials/views/hello-gridview.html – NagarjunaReddy

+0

tengo este mismo problema, a menos que doy el primer elemento de una altura explícita, que ocupa el padre completo y empuja el resto de la superficie ... – sethro

Respuesta

0

El truco en otros diseños es dar al primer elemento un android: layout_weight = "1.0" y nada a los otros elementos. Por qué funciona No tengo ni idea, pero lo hace. Aquí hay un XML simple que muestra un ImageView, un TextView y un botón. Sin el parámetro layout_weight asignado a ImageView, el texto y el botón se desplazaron hacia abajo.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/white" 
    android:orientation="vertical" 
    android:keepScreenOn = "true" > 

    <ImageView 
     android:id="@+id/imageView_surprise" 
     android:layout_width="wrap_content" 
     android:layout_height="0dip" 
     android:scaleType="centerInside" 
     android:contentDescription="@string/accessibility_imageView_surprise" 
     android:layout_weight="1.0" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_gravity="bottom" > 

     <TextView 
      android:id="@+id/textView_message" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textColor="@color/black" 
      android:textSize="24sp" 
      android:gravity="center_horizontal" /> 

     <Button 
      android:id="@+id/button_share" 
      style="@style/button_text" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

</LinearLayout> 
Cuestiones relacionadas