¿Cómo especifico el ancho y la altura de las celdas de Android GridLayout en medidas relativas?
Estoy tratando de averiguar cómo funciona GridLayout , pero una cosa que no puedo averiguar de la documentación es cómo o si se puede controlar el tamaño de las celdas de la cuadrícula.
Digamos que quiero una cuadrícula de dos por dos donde cada celda ocupan exactamente el 25% de la pantalla de bienes raíces (media altura, media anchura) – ¿puedo hacer esto?
- Translucent Dialog Theme para Holo
- Deshabilitar las teclas DPAD en android
- Cómo colorear parte de TextView en android?
- ¿Cómo puedo especificar layout_below de forma programática para un LinearLayout?
- EditText setText () establece el texto en varias vistas de EditText
Con LinearLayout lo lograría anidando dos LinearLayout horizontal en una vertical y asignando un peso de 1 a todos los elementos. GridLayout no admite la propiedad de peso sin embargo.
- ¿Cómo tener un pie de página fijo con scrollview en android?
- Cómo ocultar vistas parcialmente visibles en Android xml layout sin código?
- ¿Cómo animar la imagen a través del diseño en android?
- Ajustar el margen, la altura y el ancho del botón de imagen mediante programación
- Acolchado CardView y esquinas redondeadas
- cómo dar una animación curl página en un evento de clic de ImageButton
- Android ScrollView y los botones en la parte inferior de la pantalla
- ¿Por qué estos botones están mal alineados en un TableLayout?
Hay dos propiedades android: layout_columnWeight y layout_rowWeight que funciona como layout_weight en LinearLayout. Esto se admite en la API 21. Para los dispositivos android más antiguos, utilice GridLayout de la biblioteca de soporte v7.
Esas propiedades le permitirán ajustar la anchura / altura de la base de la columna en el valor asignado a cada columna. La fórmula es la siguiente (column_weight / sum_of_column_weight) * gridLayout_width = column_width.
He aquí un ejemplo que es un gridview con 2 filas y 2 columnas uniformemente distribuidas, cada una toma el 50% del peso y la altura de la cuadrícula.
<GridLayout android:layout_width="match_parent" android:layout_height="match_parent" android:columnCount="2" > <TextView android:text="SEARCH FEE" android:layout_columnWeight="1" android:layout_rowWeight="1" /> <TextView android:layout_columnWeight="1" android:text="SEARCH FEE" android:layout_rowWeight="1" /> <TextView android:text="SEARCH FEE" android:layout_columnWeight="1" android:layout_rowWeight="1" /> <TextView android:layout_columnWeight="1" android:text="SEARCH FEE" android:layout_rowWeight="1" /> </GridLayout>
Parece que configurarlo como desee debería ser bastante sencillo de acuerdo con la documentación:
android:rowCount='2' android:columnCount='2'
Y en los niños
android:layout_columnSpan="1" android:layout_rowSpan="1"
Esta referencia también menciona el estiramiento:
Para evitar que una columna se estire, asegúrese de que uno de los componentes de la columna no define una gravedad.
Lo que parece una solución para mantener las filas y columnas en una proporción de 50:50 sin redimensionar de acuerdo al contenido
Sería algo así:
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:columnCount="2" app:rowCount="2"> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="1" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="2" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="3" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="4" app:layout_columnWeight="1" app:layout_rowWeight="1" /> </android.support.v7.widget.GridLayout>
Hay un método auxiliar dentro del GridLayout:
GridLayout.LayoutParams params = new GridLayout.LayoutParams(); params.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1, getAlignment(Gravity.NO_GRAVITY, true), 1); item.setLayoutParams(params); private GridLayout.Alignment getAlignment(int gravity, boolean horizontal) { int mask = horizontal ? HORIZONTAL_GRAVITY_MASK : VERTICAL_GRAVITY_MASK; int shift = horizontal ? AXIS_X_SHIFT : AXIS_Y_SHIFT; int flags = (gravity & mask) >> shift; switch (flags) { case (AXIS_SPECIFIED | AXIS_PULL_BEFORE): return horizontal ? LEFT : TOP; case (AXIS_SPECIFIED | AXIS_PULL_AFTER): return horizontal ? RIGHT : BOTTOM; case (AXIS_SPECIFIED | AXIS_PULL_BEFORE | AXIS_PULL_AFTER): return FILL; case AXIS_SPECIFIED: return CENTER; case (AXIS_SPECIFIED | AXIS_PULL_BEFORE | GravityCompat.RELATIVE_LAYOUT_DIRECTION): return START; case (AXIS_SPECIFIED | AXIS_PULL_AFTER | GravityCompat.RELATIVE_LAYOUT_DIRECTION): return END; default: return GridLayout.FILL; } }
Normalmente esto es sólo una reflexión de pensamiento accesible.
Y la versión más pequeña:
params.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1, GridLayout.FILL, 1);
- La barra de estado transparente no funciona con windowTranslucentNavigation = "false"
- Resumen: Tome una foto utilizando Intención de la cámara y muestre la foto con la orientación correcta (funciona con todos los dispositivos)