Виды по центру по горизонтали внутри 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>

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

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

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

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


person RealCasually    schedule 11.09.2012    source источник
comment
GridLayout кажется бесполезным!   -  person Muhammad Babar    schedule 14.01.2016


Ответы (1)


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

person Tobias Ritzau    schedule 11.09.2012
comment
Спасибо за ответ. Из любопытства, где вы нашли это ограничение? Мы собираемся исследовать больше, но, похоже, здесь вы правы. - person RealCasually; 12.09.2012
comment
Как и во многих других случаях с Android, это был метод проб и ошибок и чтение исходного кода;) Но на самом деле в документации есть раздел под названием Ограничения со следующими предложениями: GridLayout не поддерживает принцип веса, как он определен в масса. В общем, поэтому невозможно настроить GridLayout для распределения избыточного пространства между несколькими компонентами. - person Tobias Ritzau; 12.09.2012
comment
Спасибо. Я знаю, что здесь я отклоняюсь от первоначального вопроса - но является ли вес в LinearLayout концепцией, которую я, вероятно, ищу? Моя цель - равномерно распределить эти значки на экране с равным интервалом. - person RealCasually; 12.09.2012
comment
Включая эту полезную ссылку о LinearLayouts и весах для потомков: joseluisugia.wordpress.com/2012/01/19/ - person RealCasually; 12.09.2012