Question

Je suis en train de gonfler un ImageView qui redimensionne une Drawable que je peux afficher dans un GalleryView. Mon code pour gonfler le point de vue semble fonctionner très bien, à l'exception qui ne sont pas appliqués les attributs de la ImageView. Plus précisément, le ImageView gonflé n'a pas la largeur / hauteur que je lui est affectée par l'androïde. Params de mise en page en XML

show Quelqu'un peut-moi ce que je fais mal?

Je souhaite régler la largeur / hauteur de l'image en dp, de sorte qu'il est la taille correcte à travers plusieurs écrans IPS et support applications 1.5+. En conséquence, je ne peux pas utiliser quelque chose comme:

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

Ma définition de la mise en page est:

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

Et l'extrait que je utilise pour gonfler le ImageView est:

    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;
    }
Était-ce utile?

La solution

L'astuce consiste simplement à utiliser la version suivante de inflate():

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

Les deux derniers paramètres sont obligatoires. Si vous passez « null » comme parent, le gonfleur ne sait pas quel type de paramètres de mise en page pour créer et ignore donc tous les attributs XML android:layout_. Le dernier paramètre indique simplement le gonfleur de ne pas ajouter le point de vue gonflé au parent tout de suite. Si vous passez vrai (au moins à l'intérieur d'une méthode de getView() de l'adaptateur), les mauvaises choses se produira.

Autres conseils

Je ne suis pas sûr, mais ce travail de force. Donnez un identifiant à votre imageview dans votre xml (disons qu'il est "@ + 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;
}

Par la façon dont vous devriez vérifier si l'optimiser convertView est nulle pour des vues de recyclage. Vérifiez ceci: http://code.google.com/events/io /2009/sessions/TurboChargeUiAndroidFast.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top