上一篇简单的使用了一下自定义控件的构造方法和ondraw
使用xml和代码动态获取两种添加属性的方法。
这一篇使用还是对上一篇使用的练习巩固吧。
添加属性使用xml注册。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomText">
<attr name="text" format="string"/>
<attr name="textColor" format="string"/>
<attr name="textSize" format="string"/>
</declare-styleable>
</resources>
然后是继承view使用
public class CustomText extends View{
public CustomText(Context context, AttributeSet attrs) {
this(context,attrs,0);
}
String text;
int textColor;
int textSize;
Paint paint;
Rect rect;
public CustomText(Context context, AttributeSet attrs, int i) {
super(context, attrs, i);
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomText, i, 0);
int n = typedArray.getIndexCount();
for(int j = 0;j<n;j++){
int attr = typedArray.getIndex(i);
switch (attr){
case R.styleable.CustomText_text:
text = typedArray.getString(attr);
break;
case R.styleable.CustomText_textColor:
textColor = typedArray.getColor(attr, Color.BLACK);
break;
case R.styleable.CustomText_textSize:
textSize = typedArray.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 28, getResources().getDisplayMetrics()));
break;
}
}
typedArray.recycle();
paint = new Paint();
//设置字体大小
paint.setTextSize(textSize);
//计算文字的宽度和高度
rect = new Rect();
paint.getTextBounds(text, 0, text.length(), rect);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
//设置背景颜色以及位置
paint.setColor(Color.YELLOW);
//得到的是像素 为400和200 可以由dp转化来
// http://blog.csdn.net/wangbofei/article/details/7795430 关于getMeasuredWidth() 和 getWidth()区别
int measuredWidth = getMeasuredWidth();
int measuredHeight = getMeasuredHeight();
canvas.drawRect(0, 0,measuredWidth ,measuredHeight , paint);
//设置字体颜色以及位置
paint.setColor(textColor);
int width = getWidth();
int height = getHeight();
//文字的宽高
int width1 = rect.width();
int height1 = rect.height();
canvas.drawText(text,width/2-width1/2,height/2-height1,paint);
}
}
在xml里面使用
<com.example.administrator.customcontrols3.CustomText
android:layout_width="200dp"
android:layout_height="100dp"
app:text="adsfa"
app:textColor="#666666"
app:textSize="18"
/>
当然还要在头部定义(studio定义)
xmlns:app="http://schemas.android.com/apk/res-auto" 这一篇相对于上一篇要深入一点 http://blog.csdn.net/lmj623565791/article/details/24252901 依然是理解基础上整理下