放入GalleryView的膨胀ImageView尺寸不合适

时间:2010-05-19 21:57:30

标签: android imageview galleryview

我正在尝试扩展一个ImageView,它可以缩放我可以在GalleryView中显示的Drawable。除了没有应用ImageView的属性之外,我的代码来扩展视图似乎工作正常。具体来说,膨胀的ImageView没有我通过XML中的android:layout params为它设置的宽度/高度。

有人能告诉我我做错了吗?

我想在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;
    }

2 个答案:

答案 0 :(得分:25)

诀窍就是使用以下版本的inflate()

inflater.inflate(R.layout.gallery_item, parent, false);

最后两个参数是必需的。如果传递“null”作为父级,则inflater不知道要创建的布局参数类型,因此忽略所有android:layout_ XML属性。最后一个参数只是告诉inflater不要立即将膨胀的视图添加到父级。如果你传递true(至少在Adapter的getView()方法中),会发生不好的事情。

答案 1 :(得分:1)

我不确定但这可行。在xml中为你的imageview提供一个id(比如说是“@ + id / image”:

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是否为null以便回收视图。检查一下:http://code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html