編輯:關於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
方案一:PreLollipopTransition首先在 build.gradle 配置文件添加這個庫依賴dependencies { compile
對於Android的學習,需要掌握的東西有點多,需要我們認真,小心,不斷的進取。前天突然有個想法,覺得Mp3播放器是一個可以練習的項目,於是在網上搜了下,發現有人已經寫了
Q:Android Native層Binder.transact()函數調用 Binder.onTransact() 函數失敗?在Android Native層調用Cam
本文實例為大家分享了Android仿音樂播放器功能的具體代碼,供大家參考,具體內容如下讀取本地音樂文件源代碼:import android.media.MediaPlay