GridLayout и строка/столбец Span горе
The блог разработчиков 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>
элементы для обеспечения того, чтобы каждый столбец имел минимальную ширину, иначе у меня была бы куча столбцов нулевой ширины.
однако, даже с ними, я получаю это:
в частности:
несмотря на
android:layout_gravity="fill_horizontal"
, мои виджеты с диапазонами столбцов не заполняют развернутые столбцынесмотря на
android:layout_rowSpan
значения, ничто не охватывает строки
может ли кто-нибудь воспроизвести диаграмму из сообщения в блоге с помощью GridLayout
?
спасибо!
5 ответов:
он чувствует себя довольно хаки, но мне удалось получить правильный вид, добавив дополнительный столбец и строку за то, что необходимо. Затем я заполнил дополнительный столбец пробелом в каждой строке, определяющим высоту, и заполнил дополнительную строку пробелом в каждом col, определяющим ширину. Для дополнительной гибкости я полагаю, что эти размеры пространства могут быть установлены в коде, чтобы обеспечить что-то похожее на веса. Я пытался добавить скриншот, но у меня нет репутации необходимый.
<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>
библиотека GridLayout поддержки V7 Андроида делает сверхнормальное распределение космоса легким путем приспосабливать принцип веса. Чтобы растянуть колонну, убедитесь, что компоненты внутри нее определяют вес или гравитацию. Чтобы предотвратить растяжение столбца, убедитесь, что один из компонентов в столбце не определяет вес или силу тяжести. Не забудьте добавить зависимость для этой библиотеки. Добавить com.андроид.поддержка: gridlayout-v7: 25.0.1 в build.градля.
<?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>