В представлении блога разработчиков AndroidGridLayout
показана эта диаграмма того, как промежутки влияют на автоматическое распределение индекса:
Я пытаюсь реализовать это с помощью файла 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
?
Спасибо!
android
android-gridlayout
CommonsWare
источник
источник
Ответы:
Это выглядит довольно хакерским, но мне удалось получить правильный вид, добавив дополнительный столбец и строку сверх того, что необходимо. Затем я заполнил дополнительный столбец пробелом в каждой строке, определяя высоту, и заполнил дополнительную строку пробелом в каждом столбце, определяющем ширину. Для дополнительной гибкости я предполагаю, что эти размеры пространства могут быть установлены в коде, чтобы обеспечить что-то похожее на веса. Пытался добавить скриншот, но у меня нет нужной репутации.
источник
Space
элементах. Я добавил скриншот для будущих читателей. Спасибо!rowCount
8? Нам нужно 4 строки (размер самой большойrowSpan
) плюс дополнительная,Space
так что должно быть 5. Что мне не хватает?<Gridlayout>
в отличие от<android.support.v7.widget.GridLayout>
источник
GridLayout
из пакета поддержки Android, макет сломается, что говорит о том, что они не полностью совместимы. Кроме того, я очень надеюсь, что есть способ сделать это, не требующий жесткой привязки размеров виджетов. Я ненадолго позволю этому ролику, чтобы посмотреть, какие еще ответы появятся (если они есть), но я приму ваш, если ничего лучше не появится. Еще раз спасибо!android:
атрибуты в атрибутыapp:
, используя пространство имен XML backport. Он действительно работает с задним портом.Вы должны установить как layout_gravity, так и layout_columntWeight для своих столбцов
источник
Библиотека GridLayout для поддержки Android V7 упрощает распределение избыточного пространства, учитывая принцип веса. Чтобы растянуть колонну, убедитесь, что компоненты внутри нее определяют вес или силу тяжести. Чтобы столбец не растягивался, убедитесь, что один из компонентов в столбце не определяет вес или силу тяжести. Не забудьте добавить зависимость для этой библиотеки. Добавьте com.android.support:gridlayout-v7:25.0.1 в build.gradle.
источник
Начиная с API 21, GridLayout теперь поддерживает вес, подобный LinearLayout. Подробности см. По ссылке ниже:
https://stackoverflow.com/a/31089200/1296944
источник