Android GridLayout API 21

Estoy tratando de lograr algo como esto:

introduzca la descripción de la imagen aquí

Actualmente, estoy ajustando manualmente el ancho de las fichas igual a la mitad del ancho de la pantalla. Esto funciona bien, pero hace que la adición de divisores entre los azulejos (como se ve en la captura de pantalla) duro. Afortunadamente, parece que en API 21, ahora hay soporte para el peso en GridLayout , citado aquí para su conveniencia:

A partir de la API 21, la distribución de GridLayout de espacio en exceso acopla el principio de peso. En el caso de que no se especifique ningún peso, se respetan las convenciones anteriores y las columnas y filas se consideran flexibles si sus vistas especifican alguna forma de alineación dentro de sus grupos. Por lo tanto, la flexibilidad de una vista es influenciada por su alineación que, a su vez, se define típicamente estableciendo la propiedad de gravedad de los parámetros de disposición del niño. Si se define un peso o una alineación a lo largo de un eje dado entonces el componente se toma como flexible en esa dirección. Si no se estableció peso o alineación, se supone que el componente es inflexible.

Se considera que varios componentes de la misma fila o grupo de columnas actúan en paralelo. Tal grupo es flexible sólo si todos los componentes dentro de él son flexibles. Los grupos de filas y columnas que se sientan a ambos lados de un límite común se consideran en cambio actuar en serie. El grupo compuesto formado por estos dos elementos es flexible si uno de sus elementos es flexible.

Para hacer una columna de estiramiento, asegúrese de que todos los componentes en su interior definir un peso o una gravedad. Para evitar que una columna se estire, asegúrese de que uno de los componentes de la columna no define un peso o una gravedad.

Cuando el principio de flexibilidad no proporciona desambiguación completa, los algoritmos de GridLayout favorecen filas y columnas que están más cerca de sus bordes derecho e inferior. Para ser más preciso, GridLayout trata cada uno de sus parámetros de diseño como una restricción en el conjunto de variables que definen las líneas de cuadrícula a lo largo de un eje dado. Durante el diseño, GridLayout resuelve las restricciones para devolver la solución única a aquellas restricciones para las cuales todas las variables son inferiores o iguales al valor correspondiente en cualquier otra solución válida.

He reunido este simple diseño consistente en un GridLayout con 2 columnas, tratando de lograr dos columnas igual de ancho:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <GridLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:columnCount="2"> <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> </GridLayout> </RelativeLayout> 

Pensé que puesto que todos los niños tienen el mismo peso de la columna, daría lugar a columnas igualmente-anchas. Sin embargo, esto no parece ser el caso, ya que esto es lo que resulta:

introduzca la descripción de la imagen aquí

La primera columna es más estrecha que la segunda columna. ¿Hay algo que me falta aquí? ¿Estoy entendiendo mal cómo funciona el peso con GridLayout?

Como otra pregunta, no puedo hacer el ancho de 0 con truco de peso para asegurar la igualdad de ancho sin importar el contenido (el TextView simplemente desaparece). ¿Cómo puedo lograr esto con GridLayout?

Simplemente añada android:layout_width="0dp" a cada niño del GridLayout (cualquier niño sin layout_width="0dp" romperá el diseño del peso).

Asegúrese de que no hay ninguna vista secundaria tiene un tamaño de ancho más grande que el tamaño de ancho promedio si tiene vista de niño con especificar el tamaño de ancho.

Espero que te ayude.

prueba esto, voy a editarlo muy pronto, quiero probar y ver

  <GridLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:columnCount="2" > <Button android:layout_column="0" android:layout_gravity="fill" android:layout_row="0" android:layout_columnWeight="1" android:text="c0 | r0" /> <Button android:layout_column="1" android:layout_gravity="fill" android:layout_row="0" android:layout_columnWeight="1" android:text="c1 | r0" /> <Button android:layout_column="1" android:layout_gravity="fill" android:layout_row="3" android:layout_columnWeight="1" android:text="c1 | r3" /> <Button android:layout_column="0" android:layout_gravity="fill" android:layout_row="1" android:layout_columnWeight="1" android:text="c0 | r1" /> </GridLayout> 

el texto en los botones explica cómo gridlayout funciona muy bien, ¿verdad?

Se especifica el número de columnas de una fila y se colocan los widgets en su respectiva posición (número de columna y número de fila) .. colocó las posiciones en el texto para reflejarlo.

en realidad nunca tomó el tiempo con gridlayout , tuve que jugar con eclipse durante 2 minutos para conseguirlo .. por lo que la columna y la fila .. se puede jugar con ellos en realidad, lo hice y tenía una columna y la otra columna empty.its en mi ejemplo.

Espero eso ayude

  • ¿Cómo puedo comprobar si una vista es visible o no en Android?
  • ¿Dejar de presionar dos botones a la vez?
  • FragmentActivity TabHost con Fragmento y Actividad
  • Tratar de implementar una confirmación de salida en mi aplicación para Android
  • Cómo dar una línea debajo de la vista de texto en android
  • GetView vs. BindView en un CursorAdapter personalizado?
  • Fuente personalizada en Android
  • Cómo configurar windowDrawsSystemBarBackgrounds de forma programática?
  • Implementar doble clic para el botón en Android
  • Barras del sistema translúcido y margen de contenido en KitKat
  • Cuadro de diálogo GUI de reconocimiento de voz personalizado de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.