膨胀ImageView放在GalleryView是不正确的大小
问题描述:
我想膨胀一个ImageView,缩放一个Drawable,我可以在GalleryView中显示。我的代码膨胀视图似乎工作正常,除了ImageView的属性没有应用。具体来说,膨胀的ImageView没有通过XML中的android:layout params为其设置的宽度/高度。膨胀ImageView放在GalleryView是不正确的大小
有人可以告诉我我做错了什么吗?
我想在dp中设置图像的宽度/高度,以便跨多个屏幕dpis支持Android 1.5+以上的正确尺寸。因此,我不能使用类似:
i.setLayoutParams(new Gallery.LayoutParams(150, 116)
我的布局定义是:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="150dp" android:layout_height="116dp"
android:background="@drawable/gallery_item_background"
android:scaleType="fitXY" />
</ImageView>
,我使用吹大的ImageView的片段是:
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
ImageView i = (ImageView) inflater.inflate(R.layout.gallery_item, null);
i.setImageResource(mImageIds.get(position));
i.setScaleType(ImageView.ScaleType.FIT_XY);
return i;
}
答
诀窍就是使用的inflate()
以下版本:
inflater.inflate(R.layout.gallery_item, parent, false);
最后两个参数是强制性的,如果你通过“零”作为父母,充气不知道什么类型的布局参数创造并因此而忽略所有android:layout_
XML属性。最后一个参数只是告诉充气者不要将充气的视图添加到父母身上。如果传递正确(至少在适配器的getView()
方法中),就会发生不好的事情。
答
我不知道,但这可能工作。举一个ID到您的ImageView在你的XML(说它是“@ + ID /图像”:
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View view = (View) inflater.inflate(R.layout.gallery_item, null);
ImageView i = (ImageView) view.findViewById(R.id.image);
i.setImageResource(mImageIds.get(position));
i.setScaleType(ImageView.ScaleType.FIT_XY);
return view;
}
您应该以优化其检查方式,如果convertView是为了回收意见空选中此:http://code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html
目前我使用DisplayMetrics.density攻击了一个解决方案。 float den = mDisplayMetrics.density; convertView.setLayoutParams(new Gallery.LayoutParams((int)(den * 150),(int)(den * 116))); – Richard 2010-05-20 21:13:11