Как я могу ссылаться на класс рисования в Android XML - PullRequest
13 голосов
/ 30 апреля 2010

Я создал класс, расширяющий 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 - это класс, расширяющий возможности рисования.

Ответы [ 2 ]

3 голосов
/ 24 мая 2015

Я полагаю, что здесь хорошо ответили: https://stackoverflow.com/a/11024035/2662474

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

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

В этой ссылке Роман пишет:

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

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

0 голосов
/ 01 мая 2010

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

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

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

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

<com.android.notepad.MyEditText
 id="@+id/note"
 ... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...