Android中自定义属性(attrs.xml,TypedArray)的使用

 该实例是在自定义View上使用自定义属性的。

先来看看源码:MyView.java

Code:
  1. package com.adnroid.test;  
  2.   
  3. import com.adnroid.test.R;  
  4.   
  5. import android.content.Context;  
  6. import android.content.res.TypedArray;  
  7. import android.graphics.Canvas;  
  8. import android.graphics.Color;  
  9. import android.graphics.Paint;  
  10. import android.graphics.Rect;  
  11. import android.graphics.Paint.Style;  
  12. import android.util.AttributeSet;  
  13. import android.view.View;  
  14.   
  15. public class MyView extends View {  
  16.     private Paint myPaint;  
  17.     private static final String myString = "Welcome to our Zoon!";  
  18.   
  19.     public MyView(Context context) {  
  20.         super(context);  
  21.         // TODO Auto-generated constructor stub  
  22.     }  
  23.       
  24.     public MyView(Context context, AttributeSet attr) {  
  25.         super(context, attr);  
  26.         myPaint = new Paint();  
  27.         TypedArray a = context.obtainStyledAttributes(attr, R.styleable.myView);//TypedArray是一个数组容器  
  28.         float textSize = a.getDimension(R.styleable.myView_textSize, 30);//防止在XML文件里没有定义,就加上了默认值30  
  29.         int textColor = a.getColor(R.styleable.myView_textColor, 0xFFFFFFFF);//同上,这里的属性是:名字_属性名  
  30.         myPaint.setTextSize(textSize);  
  31.         myPaint.setColor(textColor);  
  32.         a.recycle();//我的理解是:返回以前取回的属性,供以后使用。以前取回的可能就是textSize和textColor初始化的那段  
  33.     }  
  34.     @Override  
  35.     protected void onDraw(Canvas canvas) {  
  36.         // TODO Auto-generated method stub  
  37.         super.onDraw(canvas);  
  38.         //myPaint = new Paint();  
  39.         myPaint.setColor(Color.RED);  
  40.         myPaint.setStyle(Style.FILL);  
  41.           
  42.         canvas.drawRect(new Rect(10,10,100,100), myPaint);  
  43.         myPaint.setColor(Color.WHITE);  
  44.         canvas.drawText(myString, 10100, myPaint);  
  45.     }  
  46.   
  47. }  

attrs.xml

Code:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="myView">  
  4.         <attr name="textColor" format="color"/>  
  5.         <attr name="textSize" format="dimension"/>  
  6.     </declare-styleable>  
  7. </resources>  

main.xml

Code:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:test="http://schemas.android.com/apk/res/com.adnroid.test"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent"  
  7.     >  
  8. <TextView    
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="@string/hello"  
  12.     />  
  13. <com.adnroid.test.MyView  
  14.     android:layout_width="fill_parent"  
  15.     android:layout_height="fill_parent"  
  16.     test:textSize="10px"  
  17.     test:textColor="#fff"  
  18.     />  
  19. </LinearLayout>  

最终的效果

项目结构图:

你可能感兴趣的:(Android中自定义属性(attrs.xml,TypedArray)的使用)