Domanda

Ho un'applicazione AppWidget e vorrei consentire agli utenti di creare skin che possono essere applicati in fase di esecuzione. La mia soluzione preferita è quella di utilizzare i file APK con le immagini in nove pezzi png che si estendono per adattarsi al ImageView dispone di Widget, tuttavia la sua partenza a guardare come avrei potuto usare un'altra tecnica di imballaggio (ad esempio file zip).

Quello che ho provato: Importazione di nove risorse di patch come Drawable con context.getResourcesForApplication (my.app) .getResources ..., convertendoli in bitmap con una tela e l'impostazione del bitmap al RemoteView utilizzando setImageViewBitap. Questo non ha funzionato perché avevo bisogno di specificare la dimensione della vista risultanti (myBitmap.setBounds (.., ..)) durante la conversione e alcune delle larghezze / altezze nella mia AppWidget non sono fissi. Forse c'è un modo per ottenere le altezze ecc che ho perso.

L'importazione di risorse direttamente al RemoteView utilizzando setImageViewUri () Questo non funziona perché la funzione non sembra di leggere android.resource: più // Uri di (I curiosato nella fonte ImageView e sembra solo per leggere i percorsi dei file e dei contenuti: // di Uri)

L'importazione di risorse direttamente al RemoteView utilizzando setImageViewResource (), che non ha funzionato perché l'id recuperata dalla confezione esterna, ovviamente, non include un riferimento pacchetto.

Quello che sto cercando di evitare è difficile codifica tutti i miei larghezza e l'altezza del AppWidget, o utilizzando uno schema di imballaggio separato.

Qualcuno ha implementato AppWidget pelli bene e vuole condividere la conoscenza? In alternativa ci potrebbe essere un buco nella mia logica da qualche parte che può essere sottolineato.

posso fornire il codice, se necessario anche se non ho alcun qui adesso.

È stato utile?

Soluzione

Ho trovato questa soluzione campione http://www.siroccosoftware.com/devblog/?p = 10

ImageView

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

views.setImageViewUri(ID, path); 

RemoteView

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

Altri suggerimenti

mi sono imbattuto il codice per ImageView mentre stavo cercando di risolvere questo problema.

Si scopre che se l'URI non è un "contenuto" URI, quindi ImageView tenta di aprirlo da una chiamata al Drawable.createFromPath(mUri.toString()), che vuole in sostanza un percorso piuttosto che un URI.

Se si striscia il "file: ///". Sezione del tuo URI, funzionerà bene

Così si potrebbe aggiornare il codice come segue:

views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top