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