时间:2015年12月22日19:01:46
自定义View的实现步骤:
1.写一个自定义控件类,这个类就是你的自定义控件的实现.
2.在res/values目录下建立一个attrs.xml的文件,在这个文件中增加对控件的自定义属性的定义.
3.使用带AttributeSet参数的类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来.
4.在自定义控件类中使用这些已经连接的属性变量.
5.将自定义的控件类定义到布局用的xml文件中去.
6.在界面中生成此自定义控件类对象,就完成了自定义控件的创建和使用了.
注意事项:
1、定义一个attrs.xml,样式为:
<?xml version="1.0" encoding="utf-8"?> <resources>
<declare-styleable name="xxx">
<attr name="xxx" format="xxx"/>
<attr name="xxx" format="xxx"/>
<attr name="xxx" format="xxx"/>
</declare-styleable>
</resources> format类型: "reference" //引用 "color" //颜色 "boolean" //布尔值 "dimension" //尺寸值 "float" //浮点值 "integer" //整型值 "string" //字符串 "fraction" //百分数,比如200% PS:format中使用reference,例如background属性可能为reference|color,reference代表的是该属性指定的内容而不是该属性是在xml 文件中实现还是在代码中实现。 2、创建自定义的View类: 1)多数情况下自定义的View需要继承View或者其子类。 2)构造方法:多数情况下如果没有自定义的属性可以直接使用参数为Context的构造方法,如果有自定义的参数就是用参数与Context和Attribut eSet的构造方法。 3)在自定义View类中定义控件的字体大小时注意是float不是int。
4)TypedArray ta = context.obtainStyledAttributes(Attribuset attr,StyleableRes int[] res); 将自定义的属性映射打attr中,并获取到TypedArray对象,TypedArray类似于Map使用键值对,键即为 sytleable的name加下划线(_)加定义的属性name:
leftTextColor = ta.getColor(R.styleable.MyTopBar_leftTextColor,0);
5)TypedArray使用完成后需要释放ta.recycle();
6)获取到属性后要为该自定义View中的view添加属性,假设自定义View中含有两个两边对齐的button和一个居中的textview,则首先要生成
button和textview对象( Button btn = new Button(context) | TextView tv = new TextView(context) );
7)获取到view中子View的对象后,为子view对象添加属性, 例如:btn.setTextColor(leftTextColor);
8)子view获取到属性后,就要想一下如何将该子view放到指定的位置?
利用LayoutParams进行位置的排放,初始化LayoutParams时设置控件的宽和高,利用addRule()添加其他的Rule,添加完成后利用
addView()方法,将控件添加到View中。
9)在xml引用自己创建的控件时,需要对xmlns进行配置:xmlns:custom="http://schemas.android.com/apk/res-auto";
10)在xml中为控件定义一个id:android:id="@+id/xxx",然后在MainActivity中获得相应的对象。
11)可以在自定义的控件中设置回调用于对自定义控件的事件处理,也可以设置其中组件的可见性。