Android高手之路之Android中的自定义属性attr.xml、TypedArray的使用

一般我们都是使用android:xxx=""...这样的android的属性。但有时我们需要使用自定义的属性,尤其是自定义view的时候尤其需要。

一般需要以下几个步骤:

1.res/values 文件下定义一个attrs.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">  
         <attr name="textColor" format="color" />  
         <attr name="textSize" format="dimension" />  
    </declare-styleable>  
</resources>

2.重写我们的自定义View的构造方法。是使用R.styleable.MyView获得我们的自定义属性。

TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!

package com.example.viewdemo;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
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 mPaint; 
	 private Context mContext;  
	 private static final String mString = "oh,God!";  
	 public MyView(Context context) {  
	        super(context);  
	      
	    }  
	public MyView(Context context,AttributeSet attrs)  
    {  
        super(context,attrs); 
        mPaint = new Paint(); 
        TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);
        int textColor = a.getColor(R.styleable.MyView_textColor, 0xffffff);//注意加默认值
        float textSize = a.getDimension(R.styleable.MyView_textSize, 36);
        mPaint.setTextSize(textSize);
        mPaint.setColor(textColor);
        a.recycle();
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
    	super.onDraw(canvas);
        //设置填充
        mPaint.setStyle(Style.FILL);
        //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标  
        canvas.drawRect(new Rect(10, 10, 100, 100), mPaint);  
        mPaint.setColor(Color.BLUE);
        //绘制文字
        canvas.drawText(mString, 10, 110, mPaint);
    }
}

3.将我们的自定义属性用在XML布局文件中。注意前缀

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:test="http://schemas.android.com/apk/res/com.example.viewdemo"  
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <com.example.viewdemo.MyView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       test:textSize="40px"  
      test:textColor="#fff"  
        />

</LinearLayout>

运行效果:

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。