膨胀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; 
    } 
+0

目前我使用DisplayMetrics.density攻击了一个解决方案。 float den = mDisplayMetrics.density; convertView.setLayoutParams(new Gallery.LayoutParams((int)(den * 150),(int)(den * 116))); – Richard 2010-05-20 21:13:11

诀窍就是使用的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

+0

我试图添加一个id到我的ImageView无济于事:-( – Richard 2010-05-20 21:04:24

+1

伟大的提示回收视图顺便说一句 – Richard 2010-05-20 21:06:36

+0

我做了类似的东西,而是使用一个gridview每个元素的自定义布局:一个imageview和下面的文本。宽度和xml文件中的高度对我有用 顺便说一句,你确定没有什么区别吗?试着为它们加上类似20dip的东西,并检查你是否看到任何改变,并尝试一些像300dip这样的高值。 – 2010-05-20 21:54:13