Android ImageViews в проблеме рендеринга GridLayout - PullRequest
0 голосов
/ 28 февраля 2020

У меня странная проблема с GridLayout, содержащим ImageViews.

Это мой макет:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:columnCount="2"
    android:rowCount="3"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_row="1"
        android:layout_column="0"
        android:src="@drawable/test" />

    <ImageView
        android:layout_row="2"
        android:layout_column="0"
        android:src="@drawable/test" />

    <ImageView
        android:layout_row="0"
        android:layout_column="1"
        android:src="@drawable/test" />

    <ImageView
        android:layout_row="1"
        android:layout_column="1"
        android:src="@drawable/test" />

    <ImageView
        android:layout_row="2"
        android:layout_column="1"
        android:src="@drawable/test" />

</GridLayout>

Это то, чего я хотел бы достичь :

Desired layout

Однако макет, похоже, не масштабируется совсем и выглядит так (в зависимости от размера экран):

Actual layout

Что я пробовал (и не работало):

  • Добавление android:clipChildren="false" в GridLayout
  • Установка scaleType ImageViews как fitXY, fitCenter и centerCrop
  • Установка layout_width и layout_height ImageViews в wrap_content, match_parent и их перестановки (однако я бы ожидал, что GridLayout автоматически установит размер своих дочерних элементов)

Может ли кто-нибудь более опытный сказать мне, как достичь своей цели? : D Спасибо!

PS: Если есть какой-либо другой макет, который я мог бы использовать для достижения желаемого вида, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 28 февраля 2020

Необходимо указать layout_width / layout_height, а также layout_columnWeight / layout_rowWeight для дочерних представлений. Это похоже на веса в LinearLayout.

Используйте это так:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:columnCount="2"
    android:rowCount="3"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:layout_row="1"
        android:layout_column="0"
        android:src="@drawable/test" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:layout_row="2"
        android:layout_column="0"
        android:src="@drawable/test" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:layout_row="0"
        android:layout_column="1"
        android:src="@drawable/test" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:layout_row="1"
        android:layout_column="1"
        android:src="@drawable/test" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:layout_row="2"
        android:layout_column="1"
        android:src="@drawable/test" />

</GridLayout>

Кстати, я рекомендую вам использовать GridLayout из JetPack (AndroidX), поскольку он исправил некоторые ошибки и имеет лучшую реализацию в целом для разных Android версий - https://developer.android.com/jetpack/androidx/releases/gridlayout

При использовании этой версии AndroidX вы просто замените android: * пространство имен layout_rowWeight / columnWeight / layout_row / layout_column на app: * Пространство имен.

...