Frage

Ich versuche, eine Image aufzuzublasen, die eine Drawable skaliert, dass ich in einer Galerie anzeigen kann. Mein Code die Ansicht scheint zu funktionieren, außer aufblasen, dass die Attribute des Image werden nicht angewandt. Insbesondere wird das aufgeblasene Image nicht die Breite / Höhe hat, dass ich es über das Android gesetzt. Layout params in XML

Kann jemand zeigen mir, was ich falsch mache?

Ich mag die Breite / Höhe des Bildes in dp setzen, so dass sie die richtige Größe über mehr Bildschirme Pulverinhalatoren und Unterstützung Android 1.5+ ist. Als Ergebnis verwenden kann ich nicht so etwas wie:

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

Meine Layout-Definition ist:

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

Und das Snippet Ich bin mit dem Image aufzublasen ist:

    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;
    }
War es hilfreich?

Lösung

Der Trick ist, einfach die folgende Version von inflate() zu verwenden:

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

Die letzten zwei Parameter obligatorisch. Wenn Sie „null“ als Mutter passieren, wird die Aufblaseinrichtung nicht wissen, welche Art von Layout-Parameter zu erstellen und daher ignoriert alle die android:layout_ XML-Attribute. Der letzte Parameter sagt einfach den inflater nicht sofort den aufgeblasenen Blick auf den übergeordneten hinzuzufügen. Wenn Sie true 'übergeben (zumindest innerhalb eines Adapters getView()-Methode), wird schlimme Dinge passieren.

Andere Tipps

Ich bin nicht sicher, aber das könnte funktionieren. Geben Sie eine ID zu Ihrem Imageview in Ihrem xml (sagen, es ist "@ + 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;
}

Übrigens sollten Sie es überprüft zu optimieren, wenn convertView null, um Recycling-Ansichten ist. Check this: http://code.google.com/events/io /2009/sessions/TurboChargeUiAndroidFast.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top