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>
这是我想要实现的:
但是,布局似乎根本无法缩放,看起来像这样(取决于屏幕大小):
我试过(但没用):
- 在 GridLayout
中添加 android:clipChildren="false"
- 将 ImageView 的
scaleType
设置为 fitXY
、fitCenter
和 centerCrop
- 将 ImageView 的
layout_width
和 layout_height
设置为 wrap_content
、match_parent
及其排列(但是,我希望 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 :* 命名空间。
我对包含 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>
这是我想要实现的:
但是,布局似乎根本无法缩放,看起来像这样(取决于屏幕大小):
我试过(但没用):
- 在 GridLayout 中添加
- 将 ImageView 的
scaleType
设置为fitXY
、fitCenter
和centerCrop
- 将 ImageView 的
layout_width
和layout_height
设置为wrap_content
、match_parent
及其排列(但是,我希望 GridLayout 自动设置其子项的大小)
android:clipChildren="false"
可以请更有经验的人告诉我如何实现我的目标吗? :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 :* 命名空间。