标签:
1.弹出设置密码框。
控件的属性其实就是控件类一个属性设置属性调用类的set方法方法,
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");
总结:自定义控件就是我们不用系统定义的控件,我们自己定义,控件就是一个类,我们可以把这里类使用到我们的布局文件当中。 现在有许多都是可以
LayoutInflater
就是通过pull
解析布局xml文件内部调用了createViewFromTag()
该方法有节点和参数接着又去调用内部一个createView()
方法,使用反射的方式创建View
,这样通过递归的方式把DOM结构的布局全部反射创建成View
对象
视图的绘制过程都必须经历三个最主要的阶段,即onMeasure()
测量、onLayout()
确定位置和onDraw()
绘制,绘制到我们屏幕上面, 注意View
是不会帮我绘制图形的,所以每个内容需要自行绘制 TextView
ImageView
都重写了onDraw()
方法,绘制主要用到了Canvas
这个类。
源代码final View view = createViewFromTag(name, attrs);
这行代码来创建VView
对象,最后添加到父节点当中。最后如此反复得递归就可以把所有的布局绘制到窗口上面了
参考博文:
LayoutInflater原理分析,一步步了解View(一)
Android视图绘制流程完全解析,带你一步步深入了解View(二)
Android视图状态及重绘流程分析,带你一步步深入了解View(三)
Android自定义View的实现方法,带你一步步深入了解View(四)
Android 自定义控件开发入门
ListView
针对List中每个item
,要求adapter
“给我一个视图” (getView)。 所以在setAdapter()
方法的时候就是给一个可以拿到装到当前容器的View生成器
自定义控件的原理,构造函数的作用完成
其实即使在
LayoutInflater
加载成为布局的时候,通过反射响应的View
,如果pull
解析到该节点时就会调用改方法,绘制相应的View,源代码final View view = createViewFromTag(name, attrs);
这行代码来创建VView
对象,最后添加到父节点当中。最后如此反复得递归就可以把所有的布局绘制到窗口上面了。
怎么判断是子线程UI线程
google
的最新设计语言标签:
原文地址:http://www.cnblogs.com/ganwei/p/4781098.html