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.
- Android - vistas de servicio
- Cambiar el color del cursor de searchView
- GetLocationOnScreen () vs getLocationInWindow ()
- Cómo implementar la búsqueda por voz en SearchView
- Cómo programar mediante programación el orden z de vistas
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:
Mientras que el desbordamiento de la vista de la 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
- Android - Cómo saber si una vista superpone otra vista en RelativeLayout
- El niño especificado ya tiene un error de padre en la vista inflado
- Cómo ocultar el teclado de Android en la vista de búsqueda
- ¿Por qué la vista personalizada no invalida?
- Establecer márgenes en un LinearLayout programáticamente
- ¿Cómo usar la vista propia en el diseño?
- Android: Obtiene el elemento listview del botón que se hace clic en la vista de lista personalizada
- Acceso a TextView desde otra clase
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>