如何在Android XML中引用drawable类

时间:2010-04-30 18:09:48

标签: android

我创建了一个扩展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是扩展drawable的类。

2 个答案:

答案 0 :(得分:3)

我相信这在这里得到了很好的回答:https://stackoverflow.com/a/11024035/2662474

  

不幸的是,由于潜在的安全问题,无法在XML文件中使用自定义drawable。有关此主题的Google网上论坛主题,请参阅here,其中包含Android开发人员之一Romain Guy的回复。

     

但您仍然可以在Java代码中使用它们。

罗马在那个链接中写道:

  

不允许从XML使用自定义drawable,主要是出于安全原因。 XML drawables可以被其他进程(包括Launcher或系统进程)作为资源加载,在这些进程中运行随机第三方代码是一个糟糕的主意。

安全性是必不可少的,但如果有一种干净的方式可以让开发人员拥有更多的一致性和控制权,那肯定会很好。

答案 1 :(得分:-4)

对于资源xml checkout中的自定义视图类,此示例:

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

不确定这是否适用于扩展Drawable的类,但是值得一试......另外一件事,我在这个类文件中定义的类的底部错过了这个注释:

如果未将自定义View组件定义为内部类,则可以使用XML元素名称声明View组件,并排除class属性。例如:

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