2012-01-26 15 views
16

Sono occupato a creare una versione meno complicata di NinePatchDrawable che piastrella i pannelli interni invece di allungarli.Creare un Drawable personalizzato e usarlo in XML

Posso implementare la logica effettiva per eseguire il rendering e così via.

Tuttavia, non riesco a trovare la documentazione su come utilizzare questo Drawable nei file XML. È possibile? Cioè, posso avere un <tileable-nine-patch> o un tag di questo tipo che posso usare per definire le risorse?

risposta

25

Sfortunatamente non è possibile utilizzare i drawable personalizzati nei file XML (per API 23 e sotto) a causa di potenziali problemi di sicurezza. 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.

Aggiornamento:

Come LeoFarage sottolinea nei commenti, a partire dal 24 API è ora possibile utilizzare drawable personalizzati in file XML, ma solo entro il pacchetto di applicazioni.

+1

In base ai documenti [Disegnabili] (https://developer.android.com/reference/android/graphics/drawable/Drawable.html): "_Avvio in API 24, le classi dei drawable personalizzati possono essere utilizzate anche in XML._ ". Spero che sia solo questione di tempo per aggiungere questa funzionalità alla Libreria di Compat. – LeoFarage

+0

Volevo questa funzionalità almeno in modalità anteprima in IDE dall'API 9. Mi piace usare il codice per tutti gli stili, ma l'anteprima sarebbe davvero eccezionale. Grazie per le informazioni! – nekavally

0

Avvio dell'API Android 24, le classi Drawable personalizzate possono essere utilizzate in XML solo all'interno del pacchetto. drawable

personalizzato classi possono essere utilizzati in XML in diversi modi:

utilizzando il nome completo della classe come il nome dell'elemento XML. Per questo metodo, la classe drawable personalizzata deve essere una classe pubblica di primo livello.

<com.yourapp.MyCustomDrawable 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#ffff0000"/> 

Utilizzando drawable come il nome dell'elemento XML e specificando il nome completo della classe dal attributo class. Questo metodo può essere utilizzato sia per le classi pubbliche di primo livello che per le classi interne statiche pubbliche.

<drawable xmlns:android="http://schemas.android.com/apk/res/android" 
class="com.myapp.MyTopLevelClass$InnerCustomDrawable" 
android:color="#ffff0000" /> 

Nota: che non è supportato da libreria di supporto.

+1

Tre domande: 1) Quali file XML possono/devono essere le dichiarazioni inserite? Voglio dire in layout, drawable, ecc. 2) Cosa succede quando un'app con quelle gira su API <24? 3) Qual è lo scopo dell'uso di 'android: color' nei tuoi esempi? –

Problemi correlati