2012-01-26 11 views
16

Estoy ocupado creando una versión menos complicada de NinePatchDrawable que embaldosa los paneles interiores en lugar de estirarlos.Cree un Drawable personalizado y úselo en XML

Puedo implementar la lógica real para hacer la representación y tal.

Sin embargo, no puedo encontrar documentación sobre cómo usar este Drawable en los archivos XML. es posible? Es decir, ¿puedo tener una etiqueta <tileable-nine-patch>, o algo así, que pueda usar para definir recursos?

Respuesta

25

Desafortunadamente, no es posible utilizar plantillas personalizadas en archivos XML (para API 23 y siguientes) debido a posibles problemas de seguridad. Consulte here para obtener un hilo de Grupos de Google sobre este mismo tema con una respuesta de Romain Guy, uno de los desarrolladores de Android.

Aún así puede usarlos en su código Java.

Actualización:

Como LeoFarage señala en los comentarios, a partir de la API 24 ahora se puede utilizar dibujables personalizados en archivos XML, pero sólo dentro de su paquete de solicitud.

+1

De acuerdo con [Drawable] (https://developer.android.com/reference/android/graphics/drawable/Drawable.html) documentos: "_A partir de la API 24, las clases personalizables de Drawwables también se pueden usar en XML._ ". Espero que sea solo una cuestión de tiempo para que esta característica se agregue a la Biblioteca de compatibilidad. – LeoFarage

+0

Quería esta característica al menos en modo de vista previa en IDE desde API 9. Me siento cómodo de usar el código para todo el diseño, pero la vista previa sería genial. Gracias por la info! – nekavally

0

Al iniciar Android API 24, las clases de Drawables personalizadas se pueden usar en XML solo dentro de su paquete.

personalizada dibujables clases se pueden utilizar en XML en múltiples formas:

utilizando el nombre de clase completo como el nombre del elemento XML. Para este método, la clase dibujable personalizada debe ser una clase pública de nivel superior.

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

Utilizando drawable como el nombre del elemento XML y especificando el nombre de clase completo del atributo de clase. Este método se puede usar tanto para clases públicas de nivel superior como para clases internas estáticas públicas.

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

Nota: que no es compatible con la biblioteca de soporte.

+1

Tres preguntas: 1) ¿Qué archivos XML pueden/deben ser esas declaraciones puestas? Me refiero a diseños, drawables, etc. 2) ¿Qué sucede cuando una aplicación con esas se ejecuta en API <24? 3) ¿Cuál es el propósito de usar 'android: color' en tus ejemplos? –

Cuestiones relacionadas