GridLayout empuja a sus hijos y desbordamiento cuando se le da fill_parent para la altura

Como parece que el GridLayout siempre empujar a sus hijos a la disposición correspondiente a sus necesidades. Por ejemplo, la siguiente declaración:

<?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 esperaría que no se desborde. El GridLayout debe tomar el tamaño del padre que en este caso es la ventana (altura completa). Sin embargo, en el visor de jerarquía, GridLayout se establece como Wrap_content para vertical y horizontal.

Como tal, el ImageView (que es una imagen grande) 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 donde la vista de cuadrícula del contenedor se ajusta al elemento principal:

Vista de cuadrícula de contenedores

Mientras que el desbordamiento de la vista de la imagen

Vista de imagen

Al leer la documentación, entiendo que hay una necesidad de establecer la gravedad. Por lo que puedo probar, he utilizado todo tipo de opciones de gravedad y opciones de escala de imagen sin mucho efecto. Eliminar los márgenes con useDefaultMargins="false" cambia el desbordamiento de diseño que conduce el problema hacia gridlayout.

Mi pregunta sigue:

  • ¿Es esto un error o estoy usando el GridLayout incorrectamente
  • ¿Cómo puedo obligar a los niños de GridLayout a encajar su contenedor ya llenar los espacios restantes

El truco en otros diseños es darle al primer elemento un androide: layout_weight = "1.0" y nada a los otros elementos. ¿Por qué funciona? No tengo ni idea, pero lo hace. Aquí está un XML simple que exhibió 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> 
  • ¿Cómo implementar un titular de vista?
  • El cajón de navegación es lento con vista compleja
  • Vista personalizada con diseño XML en Android
  • Gallery ImageAdapter convertView siempre es nulo
  • Inflación de un diseño xml en una clase de vista personalizada
  • Android LinearLayout con varias filas
  • ¿Cómo puedo clonar una vista?
  • Android: cómo determinar la última letra totalmente visible en TextView?
  • Animar el cambio de color de fondo de la vista en Android
  • Establecer una imagen de fondo en una vista extiende mi vista
  • Android SurfaceView onDraw Pregunta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.