自定义View之继承ViewGroup
自定义View之继承ViewGroup
写了一个很简单的类,继承了LinearLayout,然后根据xml去实现基本组件组合,我现在的是两个TextView,上下结构。
注意的是继承ViewGroup,会让你实现构造方法:
1. 只有一个Context参数 -----这个是你在代码中直接new的时候调用;
2. 除了Context,还有AttributeSet参数,AttributeSet是用来判断是否有定义一些attr,在xml中可以直接设置参数,在初始化的时候可以直接获取赋值
比如在attr.xml里面
<declare-styleable name="CustomMenu">
<attr name="rightPadding" format="dimension" />
</declare-styleable>
其中format的值可以有下面这些值,具体自己看自己的view需求啦:
1) string:字符串类型;
2) integer:整数类型;
3) float:浮点型;
4) dimension:尺寸,后面必须跟dp、dip、px、sp等单位;
5) Boolean:布尔值;
6) reference:引用类型,传入的是某一资源的ID,必须以“@”符号开头;
7) color:颜色,必须是“#”符号开头;
8) fraction:百分比,必须是“%”符号结尾;
9) enum:枚举类型
在xml布局中试用时候,要加一句: xmlns:app="http://schemas.android.com/apk/res-auto"
其中,app名字可以随意,在使用中要和在xml布局使用的对应即可。
主要的方法,指定xml布局,然后接下来去初始化findview,在对view提供一些public的方法,以便外部调用:
LayoutInflater.from(context).inflate(R.layout.name_value_view, this);
......
另外:还可以通过xml进行实现一些简单的view,比如圆角,边框,实心色值,渐变色等:
布局写在drawable下面:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#f0f0f0"/>
<corners android:radius="6dip" />
</shape>
1. solid 填充色
2. corners 圆角,可以单独设置 topRadius, left, right, bottom等
3. stroke 边框,可以设置宽度
4. padding,size,gradient等等