11

我正在尝试对可以在 GalleryView 中显示的可缩放 Drawable 的 ImageView 进行充气。我膨胀视图的代码似乎工作正常,只是没有应用 ImageView 的属性。具体来说,膨胀的 ImageView 没有我通过 XML 中的 android:layout 参数为其设置的宽度/高度。

有人可以告诉我我做错了什么吗?

我想在 dp 中设置图像的宽度/高度,以便它在多个屏幕 dpi 中是正确的尺寸并支持 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;
    }
4

2 回答 2

26

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

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

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

于 2010-06-27T09:28:24.297 回答
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 是否为空以回收视图。检查这个:http ://code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html

于 2010-05-19T22:31:14.823 回答