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
的最新设计语言