1、首先创建一个类,继承view或者ViewGroup或者其子类(LinearLayout等),这个类就是将要实现的自定义控件了
2、在values文件夹下新建xml文件,取名为attrs
3、在attrs.xml中编写自定义属性集declare-styleable,在自定义属性集中创建自定义属性attr,例:
其中<declare-styleable name="myAttrs">的myAttrs是属性集的名称,用来区分多个属性集,在第一步创建的类中会用到
<attr/>里面就是一些自定义的属性值,将会在activity的xml布局文件中用到
4、在第一步创建的类的构造函数中加载xml获取属性集中的各个属性(关键字:typedArray):
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.myAttrs),这条语句我的理解是,用R.styleable.myAttrs属性集中的属性解析attrs(attrs指在xml文件中引用了自定义组件,并用命名空间初始化了的属性值)
(上面是个人理解,可能有误)
获取到typedArray后,就可以用遍历的方式,拿到在xml文件中初始化的值的资源位置,然后用typedArray.getXXX(index)方法,获取到值。
5、记得回收资源
6、接下来,就是重写onDraw方法将获得的值(String、int、drawable等)绘制出来:
7、接下来就可以在activity的xml布局文件中引用自定义组件了,必须用全路径),然后在命名空间中取出属性并进行赋值,注意,图片资源引用xml矢量图片会报错: