Android ImageViews在GridLayout中的渲染问题

Android ImageViews in GridLayout rendering problem

我对包含 ImageView 的 GridLayout 有一个奇怪的问题。

这是我的布局:

<?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>

这是我想要实现的:

但是,布局似乎根本无法缩放,看起来像这样(取决于屏幕大小):

我试过(但没用):

可以请更有经验的人告诉我如何实现我的目标吗? :D 谢谢!

PS:如果有任何其他布局可以用来实现所需的外观,请告诉我。

您需要为子视图指定 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>

顺便说一句,我建议您使用 JetPack (AndroidX) 中的 GridLayout,因为它修复了一些错误,并且对于不同的 Android 版本具有更好的整体实施 - https://developer.android.com/jetpack/androidx/releases/gridlayout

使用此 AndroidX 版本时,您只需将 android:* namespace of layout_rowWeight / columnWeight / layout_row / layout_column 替换为 app :* 命名空间。