android自定义控件(三) 自定义属性

书接上回 

在xml里建立属性,然后java代码里用typedArray获得这些属性,得到属性后,利用属性做一些事.例:得到xml里的color,赋给paint.

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

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="CustomView2">  
  4.         <attr name="textColor" format="color" />  
  5.         <attr name="textSize" format="dimension" />  
  6.     </declare-styleable>  
  7. </resources>  
  8. <!-- name="CustomView1"控件名称 得到TypedArray时用 -->  
  9. <!-- name="textColor" 对应test:textColor -->  
  10. <!-- format="color" 对应构造方法里a.getColor(R.styleable.CustomView2_textColor, 0xFFFFFFFF); -->  
format详解可参照 http://blog.csdn.net/ethan_xue/article/details/7315064
2.主要看构造函数
  1. public class CustomView2 extends View {  
  2.   
  3.     private Paint mPaint2;  
  4.     private String mText = "drawText";  
  5.   
  6.     public CustomView2(Context context, AttributeSet attrs) {  
  7.         super(context, attrs);  
  8.         mPaint2 = new Paint();  
  9.         // TypedArray是存放资源的array,1.通过上下文得到这个数组,attrs是构造函数传进来的,对应attrs.xml  
  10.         TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomView2);  
  11.         // 获得xml里定义的属性,格式为 名称_属性名 后面是默认值  
  12.         int textColor = a.getColor(R.styleable.CustomView2_textColor, 0xFFFFFFFF);  
  13.         float textSize = a.getDimension(R.styleable.CustomView2_textSize, 35);  
  14.         mPaint2.setColor(textColor);  
  15.         mPaint2.setTextSize(textSize);  
  16.         // 为了保持以后使用该属性一致性,返回一个绑定资源结束的信号给资源  
  17.         a.recycle();  
  18.     }  
  19.   
  20.     @Override  
  21.     protected void onDraw(Canvas canvas) {  
  22.         super.onDraw(canvas);  
  23.   
  24.         mPaint2.setStyle(Style.FILL);  
  25.         canvas.drawText(mText, 1060, mPaint2);  
  26.     }  
  27.   
  28. }  
3.布局
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!-- xmlns:test="http://schemas.android.com/apk/res/ethan.customview1" 包名 -->  
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:test="http://schemas.android.com/apk/res/ethan.customview1"   
  5.     android:orientation="vertical"  
  6.     android:layout_width="fill_parent"  
  7.     android:layout_height="fill_parent"  
  8.     >  
  9. <ethan.customview1.CustomView2    
  10.     android:layout_width="wrap_content"   
  11.     android:layout_height="wrap_content"   
  12.     test:textColor="#f00"  
  13.     test:textSize="20sp"  
  14.     />  
  15. </LinearLayout>  
4.效果图

下载地址  http://download.csdn.net/detail/ethan_xue/4108832
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值