Android ImageView在GridLayout渲染问题中的应用

Android ImageView在GridLayout渲染问题中的应用,android,imageview,android-gridlayout,Android,Imageview,Android Gridlayout,我对包含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_paren

我对包含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>

这就是我想要实现的目标:

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

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

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

我尝试过的(但没有成功):

<?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>
  • 在GridLayout中添加android:clipChildren=“false”
  • 将图像视图的缩放类型设置为
    fitXY
    fitCenter
    centerCrop
  • 将ImageView的
    layout\u width
    layout\u height
    设置为
    wrap\u content
    match\u parent
    及其排列(但是,我希望GridLayout自动设置其子项的大小)
请有经验的人告诉我如何实现我的目标D谢谢你


PS:如果有任何其他布局可用于实现所需的外观,请让我知道。

您需要为子视图指定
布局宽度
/
布局高度
以及
布局列权重
/
布局行权重
。它类似于线性布局中的权重

像这样使用它:

<?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版本有更好的整体实现-


使用此AndroidX版本时,您只需将android:*layout\u rowWeight/columnWeight/layout\u row/layout\u column的名称空间替换为app:*名称空间。

如果您的图像数量将是动态的,那么您应该使用recycler View,如果图像是静态的,然后,您可以只使用视图组,例如线性布局或约束layout@ParagPawar它将只是一个静态布局。我尝试过嵌套线性布局,但看起来不太好——有时图像有点不对劲。不过,我会尝试一下约束布局。谢谢你,我的朋友!:顺便问一下:有没有解释为什么我们需要将版面宽度和版面高度设置为0dp?@Firzen我不确定。可能允许明确指定某些视图的宽度/高度(因为它具有更高的优先级),而对于其他视图,则使用权重。因此,他们没有添加新属性,而是重用了已经需要的布局宽度/布局高度。这与在线性布局中使用权重类似/相同。