examples - gridlayout android weight
Android GridLayout API 21 (2)
Estoy tratando de lograr algo como esto:
Actualmente, estoy configurando manualmente el ancho de las teselas igual a la mitad del ancho de la pantalla. Esto funciona bien, pero dificulta la adición de divisores entre los mosaicos (como se ve en la captura de pantalla). Afortunadamente, parece que en API 21, ahora hay compatibilidad con el peso en GridLayout , que se cita aquí para su conveniencia:
A partir de API 21, la distribución de exceso de espacio de GridLayout cumple con 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 toman como flexibles si sus vistas especifican alguna forma de alineación dentro de sus grupos. Por lo tanto, la flexibilidad de una vista está influenciada por su alineación que, a su vez, se define típicamente estableciendo la propiedad de gravedad de los parámetros de diseño del niño. Si se definió un peso o una alineación a lo largo de un eje determinado, entonces el componente se toma como flexible en esa dirección. Si no se estableció ningún peso o alineación, se supone que el componente es inflexible.
Se considera que varios componentes en la misma fila o grupo de columnas actúan en paralelo. Tal grupo es flexible solo si todos los componentes dentro de él son flexibles. Por el contrario, se considera que los grupos de filas y columnas que se encuentran a ambos lados de un límite común actúan en serie. El grupo compuesto formado por estos dos elementos es flexible si uno de sus elementos es flexible.
Para hacer que una columna se estire, asegúrese de que todos los componentes que contiene definan un peso o una gravedad. Para evitar que una columna se estire, asegúrese de que uno de los componentes de la columna no defina 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 precisos, 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 la 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 menores que o iguales al valor correspondiente en cualquier otra solución válida.
Arreglé este diseño simple que consiste en un GridLayout con 2 columnas, tratando de lograr dos columnas igualmente anchas:
<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 dado que todos los niños tienen el mismo peso de columna, daría como resultado columnas igualmente anchas. Sin embargo, este no parece ser el caso, ya que esto es lo que resulta:
La primera columna es más estrecha que la segunda columna. ¿Hay algo que me falta aquí? ¿Entiendo mal cómo funciona el peso con GridLayout?
Como otra pregunta, parece que no puedo hacer el ancho 0 con el truco de peso para asegurar el mismo ancho independientemente del contenido (el TextView simplemente desaparece). ¿Cómo puedo lograr esto con GridLayout?
intenta esto, lo editaré muy pronto, quiero probarme 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 de los botones explica cómo funciona gridlayout
bastante bien ¿verdad?
Usted especifica el número de columnas para una fila y coloca sus widgets en su posición respectiva (Número de Columna y Número de Fila) .. colocó las posiciones en el texto para reflejarlo.
en realidad nunca me tomé el tiempo con gridlayout
, tuve que jugar con Eclipse durante 2 minutos para obtenerlo ... así que columna y fila ... puedes jugar con ellos en realidad, acabo de hacer y tenía una columna y la otra columna vacía. mi ejemplo
Espero eso ayude
Simplemente agregue android:layout_width="0dp"
a cada elemento secundario de GridLayout (cualquier elemento secundario sin layout_width="0dp"
romperá el diseño del peso).
Asegúrese de que no haya vista secundaria que tenga un ancho mayor que el ancho promedio si tiene vista secundaria con el tamaño de ancho especificado.
Espero que te ayude.