Frage

Ich habe eine AppWidget -Anwendung und möchte es Benutzern ermöglichen, Skins zu erstellen, die zur Laufzeit angewendet werden können. Meine bevorzugte Lösung besteht darin, APK -Dateien mit neun Patch -PNG -Bildern zu verwenden, die sich dehnen, um die ImageView von Widget zu entsprechen.

Was ich ausprobiert habe: Importieren von neun Patch -Ressourcen, die mit Context.getResourcesforApplication (my.app) zeichnbar sind .GetResources ..., konvertieren Sie sie mit einer Leinwand in Bitmaps und setzen Sie die Bitmap mithilfe von SetImageViewbitap auf die RemoteView. Dies funktionierte nicht, da ich die Größe der resultierenden Ansicht (MyBitMap.Setbounds (.., ..)) während der Konvertierung angeben musste und einige der Breiten/Höhen in meinem AppWidget sind nicht festgelegt. Vielleicht gibt es eine Möglichkeit, die Höhen usw. zu bekommen, die ich verpasst habe.

Importieren von Ressourcen direkt in die RemoteView mit setImageViewuri () Dies funktioniert nicht, da die Funktion nicht mehr Android.Resource: // URIs zu lesen scheint : // uris)

Importieren von Ressourcen direkt in die RemoteView mit setImageViewResource (), die nicht funktionieren, da die ID aus dem externen Paket abgerufen hat, enthält offensichtlich keine Paketreferenz.

Ich versuche zu vermeiden, dass alle meine AppWidget -Breiten und -höhe kodieren oder ein separates Verpackungsschema verwenden.

Hat jemand AppWidget Skins gut implementiert und wollte das Wissen teilen? Alternativ könnte irgendwo ein Loch in meiner Logik auftreten, auf das hingewiesen werden kann.

Ich kann bei Bedarf Code bereitstellen, aber ich habe momentan keine hier.

War es hilfreich?

Lösung

Ich fand diese Beispiellösung http://www.siccosoftware.com/devblog/?p=10

Bildansicht

Uri path = Uri.parse("android.resource://PACKAGE_NAME/RESOURCE_ID");

views.setImageViewUri(ID, path); 

Remoteview

RemoteViews views = new RemoteViews("PACKAGE_NAME", "LAYOUT_RESOURCE_ID");

Andere Tipps

Ich bin über den Code für ImageView gestoßen, während ich versucht habe, dieses Problem zu beheben.

Es stellt sich heraus, dass ImageView, wenn der URI kein "Inhalt" -Ruri ist Drawable.createFromPath(mUri.toString()), was im Wesentlichen eher einen Weg als einen URI will.

Wenn Sie den Abschnitt "Datei: ///" Ihres URI ausziehen, funktioniert er gut.

Sie können also Ihren Code wie folgt aktualisieren:

views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top