Горизонтально по центру Вид внутри Android GridLayout

Мы пишем приложение для ICS+ и считаем, что 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>

Однако 2 левых значка остаются выровненными по левому краю, а самый правый значок центрируется с оставшимся пространством.

По сути, нам нужно указать размер каждого столбца, равный 1/3 (начиная с 3 столбцов) от общего размера экрана. Я думал, что это то, что сделал GridLayout, но, похоже, "wrap_content" вызывает такое поведение (имеет смысл), но "match_parent" заставляет первый столбец заполнять весь экран, а не заполнять его ячейку, что я и ожидал.

Кажется, мы перепробовали каждую комбинацию гравитации, layout_gravity и т. Д., Но либо мы принципиально делаем что-то не так, либо нашли ограничение GridLayout.

Спасибо за вашу помощь!

1 ответ

Решение

Только одна строка и один столбец могут расти в GridLayout, и это тот, который имеет гравитацию вдоль этой оси. Если более чем одна строка или столбец задают гравитацию, только один получит его (если я помню, это "последний"). Выберите другой макет или напишите свой. Если вам нужна только строка с одинаково разделенными значками, вы можете использовать LinearLayout, где ширина компонентов равна 0px, а вес одинаков, например 1.

Другие вопросы по тегам