一:建立一個自定義view的原則:android
1.符合android的標準數組
2.能在layout的xml中定義控件屬性函數
3.實現些新功能佈局
4.要兼容android的大多數版本spa
二:定義一個view的子類設計
1.能夠直接繼承View,或是爲了省時能夠繼承View的已實現的子類,如Buttoncode
2.在繼承View以後,須要提供一個構造函數,這個函數自少提供Context和AttributeSet兩個變量。xml
context用於提供上下文,AttributeSet用於提供自定義view的屬性設置。blog
三:定義自定義屬性繼承
1.爲了能在xml中使用自定屬性,必須實現如下步驟:
1.在res下建立res/values/attrs.xml,而後自定義屬性。一般自定義的屬性文件中的name屬性名字和自定的view名字相同,這個隨意。
2.在你的佈局文件中指定自定義view的屬性值。在使用的時候,須要將命名空間加入佈局文件中,格式以下:
xmlns:NAME = http://schemas.android.com/apk/res/[your package name]
提示:
1.其中xmlns是一個特殊指令,由於命名空間通常都較長,因此用這個指令能夠自定義名字來簡化太長的命名空間
2.在使用自定的view的時候,須要指明view的徹底限定名,若是自定義的view是一個內部類,須要以下方式指定:
com.example.customviews.charting.PieChart$PieView
3.在運行時,檢索屬性值
4.將檢索出來的屬性值,付值到自定義的view上
四:應用自定義屬性
1.初始化view的時候,屬性都是檢索xml標籤中讀取而後,經過bundle發送到構造函數中的Attributes中,
固然也能夠直接定義一個Attributes變量,而後初始化view的時候使用,可是不建議,緣由以下:
1.屬性值的資源文件賦值都沒有解決。
2.樣式的stlye不適用這麼作。
2.得到屬性的方法是將AttributeSet發送給ObtainStyledAttributes(),這個方法將返回一個TypedArray包含了已經肯定的屬性值和風格。
每個定義好的 <declare-styleable>都會在R文件中自動生成一個屬性數組集合引用和每一個屬性的引用。其實每一個屬性的引用值,就是他
在屬性集合數組中的index。
在自定義view中讀取屬性方法:
提示:由於TpedArray是共享的資源,因此使用後必須回收。
五:添加動態改變屬性事件
1.Attributes雖然很強大,能夠很靈活的改變控件的屬性,可是這些屬性只能在初始化的時候使用,因此爲了能動態的改變自定義的屬性,能夠提供
一個成員變量,並提供set和get方法。
2.在setShowText方法的最後調用了invaladate()和requestLayout()。這兩個方法實現了當view的屬性如大小,顏色等,被改變了以後,須要通知
系統當前的view須要被從新繪製。
3.一個自定義的view不只要提供成員變量,同時須要也好提供一個監聽的方法,這樣的設計可使view變得更靈活。
六:使設計更容易使用:
1.當你的使用者有身體殘疾或是其餘的問題時,要保證設計可以讓他們使用:
1.輸入標籤使用android:contentDescription屬性。
2.當須要發送輔助服務的時候請調用sendAccessibilityEvent().
3.支持備用設備,如滾動球和手柄(遊戲機那個東西)。