Как я могу ссылаться на класс drawable в Android XML

Я создал класс, который расширяет drawable, который я хотел бы ссылаться внутри ресурса 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 - это класс, который расширяет возможности рисования.

Ответ 1

Я считаю, что на этот ответ ответили хорошо: fooobar.com/questions/323914/...

К сожалению, невозможно использовать пользовательские чертежи в файлах XML из-за потенциальных проблем безопасности. См. здесь для потока групп Google по этой самой теме с ответом Ромена Гая, одного из разработчиков Android.

Вы все равно можете использовать их в своем Java-коде.

В этой связи Роман пишет:

Пользовательские чертежи не допускаются из XML, главным образом из соображений безопасности. Образцы XML могут быть загружены как ресурсы другими процессами (включая Launcher или системный процесс), и было бы ужасной идеей запуска произвольного стороннего кода в этих процессах.

Безопасность важна, но, конечно, было бы неплохо, если бы был чистый способ иметь больше согласованности и контроля как разработчика.

Ответ 2

Для пользовательских классов представления в проверке xml ресурса этот пример:

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

Не уверен, что это относится к классам, которые расширяют Drawable, но стоит попробовать... Еще одна вещь, я продолжал пропускать эту заметку в нижней части для классов, определенных в их собственном файле класса:

Если ваш пользовательский компонент View не определен как внутренний класс, вы также можете объявить компонент View с именем XML-элемента и исключить атрибут класса. Например:

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