继承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中。

          9)在xml引用自己创建的控件时,需要对xmlns进行配置:xmlns:custom="http://schemas.android.com/apk/res-auto";

          10)在xml中为控件定义一个id:android:id="@+id/xxx",然后在MainActivity中获得相应的对象。
          11)可以在自定义的控件中设置回调用于对自定义控件的事件处理,也可以设置其中组件的可见性。
    






以上是关于继承ViewGroup自定义View:步骤attrs.xmlTypedArray的主要内容,如果未能解决你的问题,请参考以下文章

自定义View--继承自ViewGroup

Android自定义ViewGroup及自定义属性

自定义View(三)——继承ViewGroup实例

Android 中自定义ViewGroup实现流式布局的效果

Android 自定义控件之继承ViewGroup创建新容器

通过自定义View了解MeasureSpecMode