我有一个ImageView,它是ListItemView的一部分,假设它将显示在ListView中。没有图像,listview的每个项目都需要较少的高度。这在所有屏幕上都是一致的,因为它们都具有相同的高度。但是,在其中一个活动中,我需要在listview项目中显示图像,这总是会增加该活动的每个项目的大小。我在res>下有适当的文件夹结构。 drawable>家庭>家庭(hdpi),家庭(mdpi),家庭(xhdpi),家庭(xxhdpi),fmaily(xxxhdpi)
因此每张图片都有5个基于屏幕密度的版本。
我的布局文件中有以下内容:
ImageView imageView = listItemView.findViewById(R.id.image);
imageView.setImageResource(word.getImage());
我正在用Java代码设置图像:
{{1}}
但是,无论我选择什么分辨率,图像大小似乎总是相同,它会影响ListView中整个ListItemView的大小。
没有图像的ListView项目的大小:
使用ImageView:
您可能已经注意到具有灰色背景的ListView项目的高度发生了变化。这是正常的吗?我不想修复图像的大小。我想根据屏幕分辨率进行缩放,但是,它不应该扭曲ListView项目的整体高度。无论屏幕密度如何,此图像都保持不变。为什么它不会自动缩放并适合ListView项目。
这是正常的还是有解决方法?
答案 0 :(得分:1)
您可以通过设置android:layout_height="wrap_content"
然后相应地设置宽度比例(以使layout_weight
正常工作)来允许图像决定可以使用多少空间。
您可以更改布局以强制ImageView
达到您喜欢的高度,然后使用scaleType
来获得首选缩放。在这个例子中,我使用了fitCenter
,但还有其他一些可以选择(例如fitXY
)。
通过使用尺寸限定符dp
,图像将自动“缩放”屏幕密度,因为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"/>