一,简单介绍
1,为什么使用自定义属性?
所有的控件都是继承自view这个类的,所以view类所拥有的属性我们继承它的子类是全部都拥有的,但并不是每个控件都能使用所有属性.
比如LinearLayout中能使用layout_weight属性,而RelativeLayout却不能使用,因为layout_weight是为LinearLayout的LayoutParams定义的。
所以,我们要自定义属性,添加自己想要的属性
二,基本使用,
1,在res-values文件夹下新建attrs.xml文件
2,新建一个自定义类,通过obtainStyledAttributes设置属性值,但记得recycle(),用完回收,
public class CustomeCircle extends View {
private Paint mPaint = new Paint();
public CustomeCircle(Context context) {
this(context,null);
}
public CustomeCircle(Context context, AttributeSet attrs) {
this(context,attrs,0);
}
public CustomeCircle(Context context, AttributeSet attrs, int defStyleAttr ) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomeCircle);
int color = typedArray.getColor(R.styleable.CustomeCircle_circle_color, Color.RED);
typedArray.recycle();
mPaint.setColor(color);
}
3,也可以在layout.xml布局中使用该属性
三,相关属性:
(一)属性值的类型(format)有如下几种:
1,boolean 表示attr取值为true或者false
2,color 表示attr取值是颜色类型,例如#ff3344,或者是一个指向color的资源id,例如R.color.colorAccent.
3,dimension 表示 attr 取值是尺寸类型,例如例如取值16sp、16dp,也可以是一个指向dimen的资源id,例如R.dimen.dp_16
4,float 表示attr取值是整形或者浮点型
5,fraction 表示 attr取值是百分数类型,只能以%结尾,例如30%
6,integer 表示attr取值是整型
7,string 表示attr取值是String类型,或者一个指向String的资源id,例如R.string.testString
8,reference 表示attr取值只能是一个指向资源的id。
9,enum 表示attr取值只能是枚举类型。
10,flag 表示attr取值是flag类型。