11

GalleryViewに表示できるDrawableをスケーリングするImageViewを膨らませようとしています。ビューを膨らませる私のコードは、ImageViewの属性が適用されていないことを除いて、正常に機能しているようです。具体的には、膨張したImageViewには、XMLのandroid:layoutパラメーターを介して設定した幅/高さがありません。

誰かが私が間違っていることを私に見せてもらえますか?

画像の幅/高さをdpで設定して、複数の画面のdpiで正しいサイズになり、Android1.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);

最後の2つのパラメーターは必須です。親として「null」を渡すと、インフレータは作成するレイアウトパラメータのタイプを認識しないため、すべてのandroid:layout_XML属性を無視します。最後のパラメーターは、インフレーターに、インフレートされたビューをすぐに親に追加しないように指示するだけです。(少なくともアダプタのgetView()メソッド内で)trueを渡すと、悪いことが起こります。

于 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がnullかどうかをチェックして最適化する必要があります。これを確認してください:http ://code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html

于 2010-05-19T22:31:14.823 に答える