GridLayout и строка / колонка Span Woe

Сообщение блога разработчиков Android, представляющее GridLayout показывает эту диаграмму того, как интервалы влияют на автоматическое распределение индексов:

Автоматическое распределение индексов

Я пытаюсь реализовать это с помощью GridLayout . Вот что у меня есть до сих пор:

 <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.gridlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" app:orientation="horizontal" app:columnCount="8"> <Button app:layout_columnSpan="2" app:layout_rowSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_1"/> <Button app:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_2"/> <Button app:layout_rowSpan="4" android:text="@string/string_3"/> <Button app:layout_columnSpan="3" app:layout_rowSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_4"/> <Button app:layout_columnSpan="3" android:layout_gravity="fill_horizontal" android:text="@string/string_5"/> <Button app:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_6"/> <android.support.v7.widget.Space app:layout_column="0" android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> </android.support.v7.widget.GridLayout> 

Я должен был представить элементы <Space> чтобы каждый столбец имел минимальную ширину, иначе я бы имел кучу столбцов нулевой ширины.

Однако даже с ними я получаю следующее:

Образец GridLayout

В частности:

  • Несмотря на android:layout_gravity="fill_horizontal" , мои виджеты с android:layout_gravity="fill_horizontal" столбцов не заполняют натянутые столбцы

  • Несмотря на значения android:layout_rowSpan , ничто не охватывает строки

Может ли кто-нибудь воспроизвести диаграмму из сообщения в блоге с помощью GridLayout ?

Благодаря!

Solutions Collecting From Web of "GridLayout и строка / колонка Span Woe"

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

 <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnCount="9" android:orientation="horizontal" android:rowCount="8" > <Button android:layout_columnSpan="2" android:layout_gravity="fill" android:layout_rowSpan="2" android:text="1" /> <Button android:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="2" /> <Button android:layout_gravity="fill_vertical" android:layout_rowSpan="4" android:text="3" /> <Button android:layout_columnSpan="3" android:layout_gravity="fill" android:layout_rowSpan="2" android:text="4" /> <Button android:layout_columnSpan="3" android:layout_gravity="fill_horizontal" android:text="5" /> <Button android:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="6" /> <Space android:layout_width="36dp" android:layout_column="0" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="1" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="2" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="3" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="4" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="5" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="6" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="7" android:layout_row="7" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="0" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="1" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="2" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="3" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="4" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="5" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="6" /> </GridLayout> 

Скриншот

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:columnCount="8" android:rowCount="7" > <TextView android:layout_width="50dip" android:layout_height="50dip" android:layout_columnSpan="2" android:layout_rowSpan="2" android:background="#a30000" android:gravity="center" android:text="1" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="50dip" android:layout_height="25dip" android:layout_columnSpan="2" android:layout_rowSpan="1" android:background="#0c00a3" android:gravity="center" android:text="2" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="25dip" android:layout_height="100dip" android:layout_columnSpan="1" android:layout_rowSpan="4" android:background="#00a313" android:gravity="center" android:text="3" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="75dip" android:layout_height="50dip" android:layout_columnSpan="3" android:layout_rowSpan="2" android:background="#a29100" android:gravity="center" android:text="4" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="75dip" android:layout_height="25dip" android:layout_columnSpan="3" android:layout_rowSpan="1" android:background="#a500ab" android:gravity="center" android:text="5" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="50dip" android:layout_height="25dip" android:layout_columnSpan="2" android:layout_rowSpan="1" android:background="#00a9ab" android:gravity="center" android:text="6" android:textColor="@android:color/white" android:textSize="20dip" /> </GridLayout> </RelativeLayout> 

Скриншот

Вы должны установить как layout_gravity, так и layout_columntWeight в своих столбцах

 <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="سوم شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> <TextView android:text="دوم شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> <TextView android:text="اول شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> </android.support.v7.widget.GridLayout> 

Поддержка Android V7. Библиотека GridLayout позволяет легко распределить пространство, используя принцип веса. Чтобы растянуть колонку, убедитесь, что компоненты внутри нее определяют вес или силу тяжести. Чтобы предотвратить растяжение колонны, убедитесь, что один из компонентов в столбце не определяет вес или силу тяжести. Не забудьте добавить зависимость для этой библиотеки. Добавьте com.android.support:gridlayout-v7:25.0.1 в build.gradle.

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:columnCount="2" app:rowCount="2"> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="First" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="Second" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="Third" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" app:layout_columnWeight="1" app:layout_rowWeight="1" android:text="fourth"/> </android.support.v7.widget.GridLayout> 

Начиная с API 21, GridLayout теперь поддерживает вес LinearLayout. Для получения дополнительной информации см. Ссылку ниже:

https://stackoverflow.com/a/31089200/1296944