天天看點

android自定義控件(三) 自定義屬性

書接上回 

在xml裡建立屬性,然後java代碼裡用typedArray獲得這些屬性,得到屬性後,利用屬性做一些事.例:得到xml裡的color,賦給paint.

1.在res/values/下建立attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomView2">
    	<attr name="textColor" format="color" />
    	<attr name="textSize" format="dimension" />
    </declare-styleable>
</resources>
<!-- name="CustomView1"控件名稱 得到TypedArray時用 -->
<!-- name="textColor" 對應test:textColor -->
<!-- format="color" 對應構造方法裡a.getColor(R.styleable.CustomView2_textColor, 0xFFFFFFFF); -->
           

format詳解可參照 http://blog.csdn.net/ethan_xue/article/details/7315064

2.主要看構造函數

public class CustomView2 extends View {

	private Paint mPaint2;
	private String mText = "drawText";

	public CustomView2(Context context, AttributeSet attrs) {
		super(context, attrs);
		mPaint2 = new Paint();
		// TypedArray是存放資源的array,1.通過上下文得到這個數組,attrs是構造函數傳進來的,對應attrs.xml
		TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomView2);
		// 獲得xml裡定義的屬性,格式為 名稱_屬性名 後面是預設值
		int textColor = a.getColor(R.styleable.CustomView2_textColor, 0xFFFFFFFF);
		float textSize = a.getDimension(R.styleable.CustomView2_textSize, 35);
		mPaint2.setColor(textColor);
		mPaint2.setTextSize(textSize);
		// 為了保持以後使用該屬性一緻性,傳回一個綁定資源結束的信号給資源
		a.recycle();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		mPaint2.setStyle(Style.FILL);
		canvas.drawText(mText, 10, 60, mPaint2);
	}

}
           

3.布局

<?xml version="1.0" encoding="utf-8"?>
<!-- xmlns:test="http://schemas.android.com/apk/res/ethan.customview1" 包名 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:test="http://schemas.android.com/apk/res/ethan.customview1" 
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ethan.customview1.CustomView2  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    test:textColor="#f00"
    test:textSize="20sp"
    />
</LinearLayout>
           

4.效果圖

android自定義控件(三) 自定義屬性

下載下傳位址 http://download.csdn.net/detail/ethan_xue/4108832