2012-09-11 19 views
7

Estamos escribiendo una aplicación dirigida a ICS + y creemos que un GridLayout es el mejor paradigma de diseño, pero parece que se ha escrito muy poco al respecto, y estamos teniendo algunos problemas de alineación.horizontalmente Vistas centrales dentro de Android GridLayout

<GridLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/row_background" 
    android:rowCount="1" 
    android:columnCount="3" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:useDefaultMargins="true" 
    android:background="@drawable/list_item_bg"> 

    <ImageView 
     android:id="@+id/visibilityIcon" 
     android:layout_row="0" 
     android:layout_column="0" 
     android:src="@drawable/visibility_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"/> 

    <ImageView 
     android:id="@+id/windIcon" 
     android:layout_row="0" 
     android:layout_column="1" 
     android:src="@drawable/wind_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"/> 

    <ImageView 
     android:id="@+id/crosswindIcon" 
     android:layout_row="0" 
     android:layout_column="2" 
     android:src="@drawable/cloud_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"/> 

</GridLayout> 

Sin embargo, la izquierda 2 iconos permanecen alineados a la izquierda, y los centros de más a la derecha del icono con el espacio restante.

Esencialmente lo que tenemos que hacer es especificar el tamaño de cada columna para que sea 1/3 (desde 3 columnas) del tamaño total de la pantalla. Pensé que esto es lo que hizo GridLayout, pero parece que 'wrap_content' causa este comportamiento (tiene sentido), pero 'match_parent' hace que la primera columna llene toda la pantalla, en lugar de llenar su celda, que es el comportamiento que esperaba.

Parece que hemos probado todas las combinaciones de gravedad, layout_gravity, etc., pero o bien estamos fundamentalmente haciendo algo mal, o hemos encontrado una limitación de GridLayout.

Gracias por su ayuda!

+0

¡GridLayout parece inútil! –

Respuesta

8

Solo se permite crecer una fila y una columna en un GridLayout, y esa es la que tiene gravedad a lo largo de ese eje. Si más de una fila o columna especifican la gravedad, solo una obtendrá (si recuerdo que es la "última"). Elige otro diseño o escribe el tuyo. Si solo quiere una fila con iconos divididos por igual, puede usar un LinearLayout donde el ancho de los componentes es 0px y el peso es el mismo, p. 1.

+0

Gracias por la respuesta. Por curiosidad, ¿dónde encontraste esa limitación? Vamos a investigar más, pero parece probable que sea correcto aquí. – RealCasually

+0

Al igual que con muchas cosas con Android, era de prueba y error y leía la fuente;) Pero en realidad hay una sección en los documentos llamada Limitaciones, con las siguientes frases: "GridLayout no proporciona soporte para el principio de peso, como definido en peso. En general, no es posible configurar un GridLayout para distribuir el exceso de espacio entre varios componentes ". –

+0

Gracias. Sé que estoy divergiendo de la pregunta inicial aquí, pero ¿está el "peso" en LinearLayout el concepto que probablemente estoy buscando? Mi objetivo es distribuir de manera uniforme estos iconos dentro de la pantalla con la misma cantidad de espacio. – RealCasually

Cuestiones relacionadas