2010-04-30 19 views
13

Ho creato una classe che estende il drawable che vorrei fare riferimento all'interno di una risorsa xml. Mi capita di bisogno in un selettore, in questo modo:Come riferimento a una classe drawable in Android XML

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_window_focused="false" android:state_pressed="false" 
android:drawable="com.sample.android.contacts.TopBarCollapsed" 
/> 
<item android:state_window_focused="true" android:state_pressed="true" android:drawable="@drawable/top_switcher_collapsed_selected" /> 
<item android:state_focused="true" android:drawable="@drawable/top_switcher_collapsed_focused" /> 

com.sample.android.contacts.TopBarCollapsed è la classe che estende drawable.

+2

Ancora alla ricerca su questo - trovato questa nota http://groups.google.com/group/android-developers/browse_thread/thread/140ea9d8992434d7/28d94f078f15a6b4?lnk=gst&q=drawable#28d94f078f15a6b4 che ho letto come dicendo che non è possibile . –

+0

Ho trovato un altro thread di discussione (perso l'URL) in cui è stato detto che consentire l'autorizzazione di classi arbitrarie nel markup XML è stato vietato a causa di considerazioni di sicurezza. Il che ha senso: sarebbe relativamente facile fornire un "Drawable dannoso" per un'applicazione innocua, e il codice del drawable sarebbe eseguito nel contesto dell'app innocente. –

risposta

-4

Per le classi di visualizzazione personalizzata in una cassa di risorse xml questo esempio:

http://developer.android.com/guide/topics/ui/custom-components.html#modifying

Non sono sicuro se questo vale per le classi che estendono Drawable, ma vale la pena di provare ... Un altra cosa, ho continuato a manca questa nota verso il basso per le classi definite nel proprio file di classe:

Se il componente di visualizzazione personalizzato non è definito come una classe interna, è possibile, in alternativa, dichiarare il componente Visualizza con il nome dell'elemento XML ed escludere l'attributo della classe. Per esempio:

<com.android.notepad.MyEditText 
id="@+id/note" 
... /> 
3

Credo che questo è stato risposto bene qui: https://stackoverflow.com/a/11024035/2662474

Purtroppo non è possibile utilizzare drawable personalizzati in file XML a causa di problemi di sicurezza potenziali. Vedi here per una discussione su Google Gruppi su questo argomento con una risposta di Romain Guy, uno degli sviluppatori Android.

Puoi comunque usarli nel tuo codice Java.

In che puntano scrive Romano:

drawable personalizzati non sono consentiti da XML, per lo più per motivi di sicurezza. I drawable XML possono essere caricati come risorse da altri processi (incluso Launcher o il processo di sistema) e sarebbe una pessima idea eseguire codice casuale di terze parti in questi processi.

La sicurezza è essenziale, ma sicuramente sarebbe bello se ci fosse un modo pulito per avere più coerenza e controllo come sviluppatore.

Problemi correlati