Добавление Spinner в GridLayout, похоже, «сломает» макет. Я привел минимальный рабочий пример, чтобы проиллюстрировать проблему:Spinner внутри GridLayout
Я хочу сетку с метками слева и элементами управления справа. Элементы управления справа должны занимать оставшееся пространство. Это то, что простой пример выглядит следующим образом:
Замена одного из элементов управления ввода с вертушкой вызывает правый столбец выдвинется из границ экрана, что приводит к уродливому макету.
Почему это происходит, и как я могу избежать этого?
Вот код первого примера:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2" >
<TextView
android:layout_gravity="left"
android:text="TextView" />
<EditText
android:layout_gravity="fill_horizontal"
android:hint="EditText" />
<TextView
android:layout_gravity="left"
android:text="TextView" />
<EditText
android:layout_gravity="fill_horizontal"
android:hint="EditText" />
</GridLayout>
А вот код для второго изображения. Единственное отличие состоит в том, что первый EditText был заменен Spinner:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2" >
<TextView
android:layout_gravity="left"
android:text="TextView" />
<Spinner
android:id="@+id/spinner1"
android:layout_gravity="fill_horizontal" />
<TextView
android:layout_gravity="left"
android:text="TextView" />
<EditText
android:layout_gravity="fill_horizontal"
android:hint="EditText" />
</GridLayout>
Я бы сказал, что поведение, которое вы видите из-за атрибута 'layout_gravity', установленного на' FILL_HORIZONTAL', который растягивает (даже за пределами видимого экрана) представления, чтобы они имели такую же ширину, что и их родительский (из документов для ' Поле FILL_HORIZONTAL': * При необходимости увеличивайте горизонтальный размер объекта, чтобы он полностью заполнял его контейнер. *). – Luksprog
@Luksprog: Установки гравитации имеют другое значение внутри GridLayout (см. Http://developer.android.com/reference/android/widget/GridLayout.html, раздел «Распределение избыточного пространства»). Например, установка 'layout_gravity' счетчика на' left' дает ту же проблему. – Heinzi
Возможно, я не слишком много играл с «GridLayout». Я только что вспомнил, что я читал из класса Gravity. – Luksprog