继承ViewGroup自定义View:步骤attrs.xmlTypedArray
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承ViewGroup自定义View:步骤attrs.xmlTypedArray相关的知识,希望对你有一定的参考价值。
时间: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中。
10)在xml中为控件定义一个id:android:id="@+id/xxx",然后在MainActivity中获得相应的对象。
11)可以在自定义的控件中设置回调用于对自定义控件的事件处理,也可以设置其中组件的可见性。
以上是关于继承ViewGroup自定义View:步骤attrs.xmlTypedArray的主要内容,如果未能解决你的问题,请参考以下文章
Android 中自定义ViewGroup实现流式布局的效果