其实很早以前在属性(Attribute)资源的使用:自定义组件一文中就介绍过自定义组件及属性的使用,这里再次回顾以下,直接上代码:
MainActivity:
package com.home.testtypedarray;
import android.os.Bundle;
import android.app.Activity;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
main布局:
MyView类:
package com.home.testtypedarray;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
private Paint paint;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
// 得到MyView的TypedArray对象(属性的容器)
TypedArray a = context
.obtainStyledAttributes(attrs, R.styleable.MyView);
// 得到MyView的textColor属性值
int textColor = a.getColor(R.styleable.MyView_textColor, 0XFFFFFFFF);
// 得到MyView的textSize属性值
float textSize = a.getDimension(R.styleable.MyView_textSize, 36);
paint.setColor(textColor);// 为画笔设置颜色
paint.setTextSize(textSize);// 为画笔设置字体大小
// Give back a previously retrieved StyledAttributes, for later re-use
a.recycle();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setStyle(Style.FILL);// 设置为填充风格
canvas.drawText("测试自定义属性", 10, 30, paint);// 绘制文字
canvas.drawRect(new Rect(10, 50, 200, 200), paint);// 绘制矩形
}
}
attrs.xml: