可绘制图像不按屏幕密度缩放
Drawable Image does not scale as per screen density
我有一个 ImageView,它是 ListItemView 的一部分,应该显示在 ListView 中。没有图像,列表视图的每个项目占用更少的高度。这在所有屏幕上都是一致的,因为它们都具有相同的高度。但是,在其中一项活动中,我需要在列表视图项目中显示图像,这总是会增加该 activity 的每个项目的大小。我在 res > drawable > family > family (hdpi), family (mdpi), family (xhdpi), family (xxhdpi), fmaily (xxxhdpi)
下有正确的文件夹结构
因此每个图像根据屏幕密度有 5 个版本。
我的布局文件中有以下内容:
<ImageView
android:id="@+id/image"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="right|center"/>
我正在 Java 代码中设置图像:
ImageView imageView = listItemView.findViewById(R.id.image);
imageView.setImageResource(word.getImage());
但是,无论我选择什么分辨率,图像大小似乎总是相同的,它会影响 ListView 中整个 ListItemView 的大小。
不含图像的 ListView 项的大小:
使用 ImageView:
您可能已经注意到灰色背景的 ListView 项目的高度发生了变化。这正常吗。我不想固定图像的大小。我想根据屏幕分辨率缩放它,但是,它不应该扭曲 ListView 项目的整体高度。无论屏幕密度如何,该图像都保持不变。为什么它不会自动缩放并适合 ListView 项目。
这是正常现象还是有解决方法?
您允许图像通过设置 android:layout_height="wrap_content"
然后相应地调整宽度来决定它可以使用多少 space(为了让您的 layout_weight
正常工作) .
您可以更改布局以强制 ImageView
达到您喜欢的高度,并让使用 scaleType
获得首选缩放比例。在此示例中,我使用了 fitCenter
,但也可以选择其他选项(例如 fitXY
)。
通过使用大小限定符 dp
,图像将自动 "scale" 具有屏幕密度,因为 dp
是与密度无关的像素,这意味着它会随着屏幕密度而变化。
<ImageView
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitCenter"
android:layout_weight="1"
android:layout_gravity="right|center"/>
我有一个 ImageView,它是 ListItemView 的一部分,应该显示在 ListView 中。没有图像,列表视图的每个项目占用更少的高度。这在所有屏幕上都是一致的,因为它们都具有相同的高度。但是,在其中一项活动中,我需要在列表视图项目中显示图像,这总是会增加该 activity 的每个项目的大小。我在 res > drawable > family > family (hdpi), family (mdpi), family (xhdpi), family (xxhdpi), fmaily (xxxhdpi)
下有正确的文件夹结构因此每个图像根据屏幕密度有 5 个版本。
我的布局文件中有以下内容:
<ImageView
android:id="@+id/image"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="right|center"/>
我正在 Java 代码中设置图像:
ImageView imageView = listItemView.findViewById(R.id.image);
imageView.setImageResource(word.getImage());
但是,无论我选择什么分辨率,图像大小似乎总是相同的,它会影响 ListView 中整个 ListItemView 的大小。
不含图像的 ListView 项的大小:
使用 ImageView:
您可能已经注意到灰色背景的 ListView 项目的高度发生了变化。这正常吗。我不想固定图像的大小。我想根据屏幕分辨率缩放它,但是,它不应该扭曲 ListView 项目的整体高度。无论屏幕密度如何,该图像都保持不变。为什么它不会自动缩放并适合 ListView 项目。
这是正常现象还是有解决方法?
您允许图像通过设置 android:layout_height="wrap_content"
然后相应地调整宽度来决定它可以使用多少 space(为了让您的 layout_weight
正常工作) .
您可以更改布局以强制 ImageView
达到您喜欢的高度,并让使用 scaleType
获得首选缩放比例。在此示例中,我使用了 fitCenter
,但也可以选择其他选项(例如 fitXY
)。
通过使用大小限定符 dp
,图像将自动 "scale" 具有屏幕密度,因为 dp
是与密度无关的像素,这意味着它会随着屏幕密度而变化。
<ImageView
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitCenter"
android:layout_weight="1"
android:layout_gravity="right|center"/>