一、定义与声明
在资源文件夹values下新建attr.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="text" format="string"/>
<attr name="textColor" format="color"/>
<attr name="textSize" format="dimension"/>
<declare-styleable name="CodeView">
<attr name="text"></attr>
<attr name="textColor"></attr>
<attr name="textSize"></attr>
</declare-styleable>
</resources>
其中CodeView是自定义styleable名,可以随意取
format有以下几种:
- reference:参考某一资源ID
- color:颜色值
- boolean:布尔值
- dimension:尺寸值
- float:浮点值
- integer:整型值
- string:字符串
- fraction:百分数
- enum:枚举值
- flag:位或运算
二、具体使用
具体的解析需要自行来做对应的修改:
/**
* 解析自定义属性
*
* @param context
* @param attrs
*/
private void parseAttr(Context context, @Nullable AttributeSet attrs) {
TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.CodeView);
int num = attributes.getIndexCount();
for (int i = 0; i < num; i++) {
int attr = attributes.getIndex(i);
switch (attr) {
case R.styleable.CodeView_text:
mText = attributes.getString(attr);
break;
case R.styleable.CodeView_textColor:
//默认设置为黑色
mTextColor = attributes.getColor(attr, Color.BLACK);
break;
case R.styleable.CodeView_textSize:
//默认设置为16sp,TypeValue也可以把sp转化为px
mTextSize = attributes.getDimensionPixelSize(attr, (int) TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources()
.getDisplayMetrics()));
break;
}
}
attributes.recycle();
}
上述方法是在自定义View的构造器中调用的:
public CodeView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
parseAttr(context, attrs);
}
public CodeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
parseAttr(context, attrs);
}