1.彈出設置密碼框。java
控件的屬性其實就是控件類一個屬性設置屬性調用類的set方法方法,android
View
對象繼承自相對佈局,線性佈局或者其餘的ViewGroup
View
對象重寫構造方法,而後初始化佈局,經過View.inflate()
方法把咱們本身定義的佈局掛到界面當中。res/values
目錄下建立attrs.xml
裏面定義一些屬性,<resources
<declare-styleable name="cn.itcast.phonesafe.view.SettingView">
<attr name="setting_title" format="string" />
<attr name="des_on" format="string" />
<attr name="des_off" format="string" />
</declare-styleable>
</resources>
生命自定義屬性的命名空間 xmlns:zl_pro="http://schemas.android.com/apk/res/cn.zlpro.mobilesafe"
函數
能夠在當前佈局裏面使用咱們1條
定義的控件了。佈局
AttributeSet
attrs
裏面能夠獲取到title = attrs.getAttributeValue( "http://schemas.android.com/apk/res/cn.zlpro.mobilesafe","setting_title");
總結:自定義控件就是咱們不用系統定義的控件,咱們本身定義,控件就是一個類,咱們能夠把這裏類使用到咱們的佈局文件當中。 如今有許多都是能夠 google
LayoutInflater
就是經過pull
解析佈局xml文件內部調用了createViewFromTag()
該方法有節點和參數接着又去調用內部一個createView()
方法,使用反射的方式建立View
,這樣經過遞歸的方式把DOM結構的佈局所有反射建立成View
對象spa
視圖的繪製過程都必須經歷三個最主要的階段,即onMeasure()
測量、onLayout()
肯定位置和onDraw()
繪製,繪製到咱們屏幕上面, 注意View
是不會幫我繪製圖形的,因此每一個內容須要自行繪製 TextView
ImageView
都重寫了onDraw()
方法,繪製主要用到了Canvas
這個類。.net
源代碼final View view = createViewFromTag(name, attrs);
這行代碼來建立VView
對象,最後添加到父節點當中。最後如此反覆得遞歸就能夠把全部的佈局繪製到窗口上面了 線程
參考博文:
LayoutInflater原理分析,一步步瞭解View(一)
Android視圖繪製流程徹底解析,帶你一步步深刻了解View(二)
Android視圖狀態及重繪流程分析,帶你一步步深刻了解View(三)
Android自定義View的實現方法,帶你一步步深刻了解View(四)
Android 自定義控件開發入門設計
ListView
針對List中每一個item
,要求adapter
「給我一個視圖」 (getView)。 因此在setAdapter()
方法的時候就是給一個能夠拿到裝到當前容器的View生成器
code
自定義控件的原理,構造函數的做用完成
其實即便在
LayoutInflater
加載成爲佈局的時候,經過反射響應的View
,若是pull
解析到該節點時就會調用改方法,繪製相應的View,源代碼final View view = createViewFromTag(name, attrs);
這行代碼來建立VView
對象,最後添加到父節點當中。最後如此反覆得遞歸就能夠把全部的佈局繪製到窗口上面了。
怎麼判斷是子線程UI線程
google
的最新設計語言