2010-04-30 11 views
13

He creado una clase que amplía drawable a la que me gustaría hacer referencia dentro de un xml de recursos. Sucede que lo necesita en un selector, así:¿Cómo puedo hacer referencia a una clase dibujable en 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 es la clase que se extiende estirable.

+2

Aún así la búsqueda en este - se encuentra esta nota http://groups.google.com/group/android-developers/browse_thread/thread/140ea9d8992434d7/28d94f078f15a6b4?lnk=gst&q=drawable#28d94f078f15a6b4 que leí como diciendo que no es posible . –

+0

Encontré otro hilo de discusión (se perdió la URL) donde se decía que no se permitía permitir clases dibujables arbitrarias en el marcado XML debido a consideraciones de seguridad. Lo cual tiene sentido: sería relativamente fácil proporcionar un "Drawable malicioso" para una aplicación inofensiva, y el código del dibujo se ejecutaría en el contexto de la aplicación inocente. –

Respuesta

-4

Para las clases de vista personalizada en una salida de recursos xml este ejemplo:

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

No estoy seguro si eso se aplica a las clases que se extienden Disponibles, pero vale la pena probarlo ... Otra cosa, me quedé falta esta nota hacia abajo para las clases definidas en su propio archivo de clase:

Si su componente Vista personalizado no está definido como una clase interna, entonces puede, alternativamente, declarar el componente Vista con el nombre del elemento XML y excluir el atributo de clase. Por ejemplo:

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

Creo que esto fue respondido bien aquí: https://stackoverflow.com/a/11024035/2662474

Por desgracia, no es posible utilizar dibujables personalizados en archivos XML, debido a 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.

En ese enlace escribe romana:

dibujables personalizados no se permite a partir de XML, sobre todo por razones de seguridad. Los documentos XML pueden ser cargados como recursos por otros procesos (incluido el iniciador o el proceso del sistema) y sería una terrible idea ejecutar código aleatorio de terceros en estos procesos.

La seguridad es esencial, pero sin duda sería bueno si hubiera una manera limpia de tener más consistencia y control como desarrollador.

Cuestiones relacionadas