Domanda

Sto cercando di gonfiare un ImageView in grado di scalare una Drawable che posso visualizzare in un GalleryView. Il mio codice per gonfiare la vista sembra funzionare bene, tranne che gli attributi del ImageView non vengono applicate. In particolare, l'ImageView gonfiato non ha la larghezza / altezza che ho impostato per esso tramite l'Android:. Params di layout in XML

Qualcuno può mostrare me quello che sto facendo male?

Voglio impostare la larghezza / altezza dell'immagine in dp, in modo che sia la dimensione corretta su più DPI dello schermo e il supporto Android 1.5+. Di conseguenza non posso usare qualcosa come:

i.setLayoutParams(new Gallery.LayoutParams(150, 116)

La mia definizione di layout è:

<?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>

E frammento che sto usando per gonfiare l'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;
    }
È stato utile?

Soluzione

Il trucco è semplicemente quello di utilizzare la seguente versione di inflate():

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

Gli ultimi due parametri sono obbligatori. Se si passa "null" come il genitore, il gonfiatore non sa che tipo di parametri di layout per creare e ignora quindi, tutti gli attributi android:layout_ XML. L'ultimo parametro indica semplicemente il gonfiatore di non aggiungere la vista gonfiato al genitore subito. Se si passa vero (almeno all'interno di un metodo di getView() Adapter), cose cattive accadrà.

Altri suggerimenti

Non sono sicuro, ma questo lavoro potrebbe. Dare un id al vostro imageview nel xml (dicono che è "@ + id / immagine":

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;
}

Per il modo in cui si dovrebbe ottimizzare lo verificare se convertView è nullo al fine di vista riciclare. Controllare questo: http://code.google.com/events/io /2009/sessions/TurboChargeUiAndroidFast.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top