Как сделать динамические размеры кнопок, чтобы они соответствовали контейнеру компоновки сетки в XML? (Android)

111
6

У меня есть gridView с несколькими изображениями и текстовыми widgets. XML выглядит так (остальные виджеты выглядят одинаково):

<GridLayout
android:id="@+id/grid"
android:layout_width="0dp"
android:layout_height="218dp"
android:alignmentMode="alignBounds"
android:columnCount="3"
android:rowCount="4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/graphicContainer">

<ImageButton
android:id="@+id/cookieImageButton"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_column="0"
android:layout_row="0"
android:background="#0000"
android:scaleType="fitCenter"
app:srcCompat="@drawable/cookie_icon_60at3x"
tools:layout_editor_absoluteX="33dp"
tools:layout_editor_absoluteY="300dp"
/>
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_row="1"
android:autoSizeMinTextSize="40px"
android:autoSizeTextType="uniform"
android:fontFamily="@font/youre_so_cool_regular"
android:text="Cookies"
android:textAlignment="center"
tools:layout_editor_absoluteX="33dp"
tools:layout_editor_absoluteY="369dp" />

Результат, похожий на this

Это прекрасно, но я хочу, чтобы размеры widgets (изображения и текстовые виды) изменялись динамически, чтобы заполнить весь gridView. Есть ли способ сделать это в XML? Я искал ответ и нашел альтернативы следующим образом: https://stackoverflow.com/questions/6444042/java-resize-image-dynamically-to-fit-grids-in-gridlayout

Но это кажется излишним сложным и что-то, что можно и нужно исправить с помощью некоторого кода XML. Или я ошибаюсь?

спросил(а) 2021-01-19T14:47:46+03:00 9 месяцев, 1 неделя назад
1
Решение
66

Попробуйте этот код. Добавьте ниже зависимостей в файл градиента уровня приложения.

  implementation 'com.intuit.sdp:sdp-android:1.0.4'

то после изменения это..

<GridLayout android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alignmentMode="alignBounds"
android:columnCount="3"
android:rowCount="4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/graphicContainer"
xmlns:android="http://schemas.android.com/apk/res/android">

<ImageButton
android:id="@+id/cookieImageButton"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_width="@dimen/_60sdp"
android:layout_height="@dimen/_60sdp"
android:layout_column="0"
android:layout_row="0"
android:background="#0000"
android:scaleType="fitCenter"
app:srcCompat="@drawable/cookie_icon_60at3x"
tools:layout_editor_absoluteX="33dp"
tools:layout_editor_absoluteY="300dp"
/>
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_row="1"
android:autoSizeMinTextSize="40px"
android:autoSizeTextType="uniform"
android:fontFamily="@font/youre_so_cool_regular"
android:text="Cookies"
android:textAlignment="center"
tools:layout_editor_absoluteX="@dimen/_33sdp"
tools:layout_editor_absoluteY="@dimen/_369sdp" />

ответил(а) 2021-01-19T14:47:46+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема