編輯:Android開發實例
最近接觸了Android自定義控件,涉及到自定義xml中得屬性(attribute),其實也很簡單,但是寫著寫著,發現代碼不完美了,就是在attrs.xml這個文件中,發現屬性冗余,於是就想有沒有類似屬性繼承或者include之類的方法.本文將就declare-stylable中屬性重用記錄一下.
不完美的代碼
代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ExTextView">
<attr name="enableOnPad" format="boolean" />
<attr name="supportDeviceType" format="reference"/>
</declare-styleable>
<declare-styleable name="ExEditText">
<attr name="enableOnPad" format="boolean" />
<attr name="supportDeviceType" format="reference"/>
</declare-styleable>
</resources>
如上面代碼,在ExTextView和ExEditText這個stylable中有著重復的屬性申明.雖然上面可以工作,但是總感覺寫的不專業,於是尋找優化方法.
這樣可以麼
嘗試著為declare-stylable指定一個parent,如下代碼
代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ExTextView">
<attr name="enableOnPad" format="boolean" />
<attr name="supportDeviceType" format="reference"/>
</declare-styleable>
<declare-styleable name="ExEditText" parent="ExTextView">
</declare-styleable>
</resources>
attrs.xml沒有報告語法錯誤.但是當我使用R.styleable.ExEditText_supportDeviceType時候,R文件卻沒有生成,重新清理了工程還是不生效,不知道是否為adt插件的問題.其他人也遇到了這樣的問題. 這個方法目前是不行的.
終極答案
實際上我們可以在declare-stylable之前,申明要多次使用的屬性,在declare-stylable節點內部,只需調用即可.具體代碼如下.
代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="enableOnPad" format="boolean" />
<attr name="supportDeviceType" format="reference"/>
<declare-styleable name="ExTextView">
<attr name="enableOnPad"/>
<attr name="supportDeviceType"/>
</declare-styleable>
<declare-styleable name="ExEditText">
<attr name="enableOnPad"/>
<attr name="supportDeviceType"/>
</declare-styleable>
</resources>
每次引用attr後,建議清理一下工程,確保R文件重新生成.
延伸閱讀
http://stackoverflow.com/questions/18827875/how-to-declare-several-stylable-attributes-with-the-same-name-for-different-tags
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
在Android中,可以有多種方式來實現網絡編程: 創建URL,並使用URLConnection/HttpURLConnection 使用HttpClient使用
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
眾所周知,一般情況下我們使用android中的monkeyrunner進行自動化測試時,使用的是python語言來寫測試腳本。不過,最近發現可以用java調用mo