2010-04-30 58 views
13

我已經創建了一個擴展drawable的類,我想在資源xml中引用它。我正好需要它的選擇,像這樣:如何在Android XML中引用可繪製類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

仍然在搜索 - 找到這個筆記http://groups.google.com/group/android-developers/browse_thread/thread/140ea9d8992434d7/28d94f078f15a6b4?lnk=gst&q=drawable#28d94f078f15a6b4我認爲這是不可能的。 – 2010-05-05 03:22:44

+0

我發現了另一個討論線程(丟失了URL),因爲出於安全考慮,允許XML標記中的任意可繪製類被禁止。這是有道理的:爲一個無害的應用程序提供一個「惡意Drawable」是相對容易的,drawable的代碼將在無辜的應用程序中執行。 – 2013-02-27 13:37:40

回答

-4

對於資源的XML結帳這個例子中自定義視圖類:

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

不知道是否適用於擴展可繪製類,但它值得一試......還有一件事,我一直如果您的自定義View組件未定義爲內部類,則可以用XML元素名稱聲明View組件,並排除該組件類屬性。例如:

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

我相信這是回答得很好了這裏:https://stackoverflow.com/a/11024035/2662474

遺憾的是無法使用的XML文件的自定義繪製資源由於潛在的安全問題。請參閱here,以獲取有關此主題的Google網上論壇主題以及來自Android開發人員之一Romain Guy的回覆。

儘管如此,仍然可以在Java代碼中使用它們。

在該鏈接羅馬寫道:

自繪項目不是從XML允許的,主要是出於安全考慮。 XML drawable可以通過其他進程(包括Launcher或系統進程)加載爲資源,在這些進程中運行隨機第三方代碼將是一個可怕的想法。

安全性是必不可少的,但當然如果有一種乾淨的方式來作爲開發人員擁有更多的一致性和控制權,那肯定會很好。