在xml 文件里定义控件的属性,我们已经习惯了android:attrs="" ,那么我们能不能定义自己的属性能,比如:test:attrs="" 呢?答案是肯定的. 好了我就不卖关子了,直接进入主题。大致以下步骤: 一、 在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> 
format有如下几种格式:
"reference" //引用"color" //颜色"boolean" //布尔值"dimension" //尺寸值"float" //浮点值"integer" //整型值"string" //字符串"fraction" //百分数,比如200%

二、 我们在MyView.java 代码修改如下,其中下面的构造方法是重点,我们获取定义的属性我们R.sytleable.MyView_textColor, 获取方法中后面通常设定默认值(float textSize = a.getDimension(R.styleable.MyView_textSize, 36 ); ), 防止我们在xml 文件中没有定义.从而使用默认值! 获取,MyView 就是定义在<declare-styleable name="MyView "></declare-styleable> 里的名字,获取里面属性用 名字_ 属性 连接起来就可以.TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!
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,                     0XFFFFFFFF);             float textSize = a.getDimension(R.styleable.MyView_textSize, 36);                          mPaint.setTextSize(textSize);             mPaint.setColor(textColor);                          a.recycle();         } 

MyView.java 全部代码如下:
package com.android.tutor;     import android.content.Context;     import android.content.res.TypedArray;     import android.graphics.Canvas;     import android.graphics.Color;     import android.graphics.Paint;     import android.graphics.Rect;     import android.graphics.Paint.Style;     import android.util.AttributeSet;     import android.view.View;     public class MyView extends View {         private Paint mPaint;         private Context mContext;         private static final String mString = "Welcome to Mr Wei's blog";                  public MyView(Context context) {             super(context);             mPaint = new Paint();         }         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,                     0XFFFFFFFF);             float textSize = a.getDimension(R.styleable.MyView_textSize, 36);                          mPaint.setTextSize(textSize);             mPaint.setColor(textColor);                          a.recycle();         }         @Override        protected void onDraw(Canvas canvas) {             // TODO Auto-generated method stub             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);         }     } 

三、将我们自定义的MyView 加入布局main.xml 文件中,平且使用自定义属性,自定义属性必须加上: xmlns:test =" http://schemas.android.com/apk/res/com.android.tutor"test 是自定义属性的前缀,com.android.tutor 是我们包名. main.xml 全部代码如下:
<?xml    version="1.0" encoding="utf-8"?>   <LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"                   xmlns:test="http://schemas.android.com/apk/res/com.android.tutor"      android:orientation="vertical"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      >   <TextView         android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/hello"      />   <com.android.tutor.MyView       android:layout_width="fill_parent"        android:layout_height="fill_parent"        test:textSize="20px"      test:textColor="#fff"  />   </LinearLayout>  

四、运行之效果如下图:


更多相关文章

  1. Android(安卓)Studio与Genymotion模拟器结合使用的一些心得
  2. Android(安卓)反编译apk文件得到项目文件
  3. Android中的Toast的标准格式和自定义格式
  4. 【Android性能优化】使用NDK进行Java和C++混编
  5. android UI 之 渐变效果
  6. 高效地分析Android内存--MAT工具解析
  7. Android(安卓)Studio(3)---Android(安卓)Studio的配置
  8. Android下jni开发之ndk的使用(下载、配置、编译遇到的问题)
  9. android http——OkHttp使用详解

随机推荐

  1. Android中对Group的各种操作示例代码
  2. android socket client
  3. Android Activity与Fragment传值
  4. Android中跳转页面并传值
  5. 编译Android时,添加或者删除system.img中
  6. Android系统的开机画面显示过程分析(7)
  7. android学习笔记一
  8. Android 隐藏底部导航栏和状态栏,动态调
  9. android上传文件至服务器
  10. Android Wear 进阶 5 - Creating Watch F