Android GridLayout API 21

Я пытаюсь сделать что-то вроде этого:

В настоящее время я вручную устанавливаю ширину тайлов, равную половине ширины экрана. Это хорошо работает, но затрудняет добавление разделителей между плитками (как видно на скриншоте). К счастью, похоже, что в API 21теперь есть поддержка веса в GridLayout, приведенный здесь для вашего удобства:

Что касается API 21, распределение избыточного пространства GridLayout соответствует принципу веса. Если весовые коэффициенты не указаны, предыдущие соглашения соблюдаются, а столбцы и строки считаются гибкими, если их представления задают некоторую форму выравнивания в своих группах. Поэтому на гибкость представления влияет его выравнивание, которое, в свою очередь, обычно определяется установкой свойства gravity дочерних параметров макета. Если либо вес, либо выравнивание были определены вдоль заданной оси, то компонент считается гибким в этом направлении. Если вес или выравнивание не было задано, вместо этого предполагается, что компонент негибкий.

Считается, что несколько компонентов в одной строке или группе столбцов действуют параллельно. Такая группа является гибкой, только если все компоненты в ней являются гибкими. Группы строк и столбцов, которые находятся по обе стороны от общей границы, вместо этого считаются действующими последовательно. Составная группа, состоящая из этих двух элементов, является гибкой, если один из ее элементов является гибким.

Чтобы растянуть столбец, убедитесь, что все компоненты внутри него определяют вес или силу тяжести. Чтобы столбец не растягивался, убедитесь, что один из компонентов в столбце не определяет вес или силу тяжести.

Когда принцип гибкости не обеспечивает полного устранения неоднозначности, алгоритмы GridLayout предпочитают строки и столбцы, которые находятся ближе к его правому и нижнему краям. Чтобы быть более точным, GridLayout обрабатывает каждый из своих параметров макета как ограничение в наборе переменных, которые определяют линии сетки вдоль заданной оси. Во время компоновки GridLayout решает ограничения так, чтобы возвращать уникальное решение тем ограничениям, для которых все переменные меньше или равны соответствующему значению в любом другом допустимом решении.

Я собрал этот простой макет, состоящий из GridLayout с 2 столбцами, пытаясь получить два одинаково широких столбца:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:columnCount="2">
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
    </GridLayout>
</RelativeLayout>

Я думал, что, поскольку все дети имеют одинаковый вес столбца, это приведет к одинаково широким столбцам. Однако, похоже, это не так, поскольку это приводит к следующим результатам:

Первый столбец уже второго столбца. Есть что-то, чего я здесь не хватает? Я неправильно понимаю, как работает вес с GridLayout?

В качестве другого вопроса, я не могу сделать трюк с шириной 0, чтобы обеспечить равную ширину независимо от содержимого (TextView просто исчезает). Как я могу сделать это с GridLayout?

Ответы на вопрос(2)

Ваш ответ на вопрос