Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!

xml文件里定义控件的属性,我们已经习惯了android:attrs="",那么我们能不能定义自己的属性能,比如:test:attrs=""呢?答案是肯定的.

好了我就不卖关子了,直接进入主题。大致以下步骤:

一、res/values文件下定义一个attrs.xml文件.代码如下:

    一、在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>  

二、我们在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"蓝色是自定义属性的前缀,红色是我们包名.

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>  

四、运行之效果如下图:

Android高手进阶教程之----Android 中自定义属性(attr.xml,TypedArray)的使用!_第1张图片

更多相关文章

  1. ImageView之android:tint=" "属性方法作用详解
  2. android之LinearLayout中android:layout_weight属性理解
  3. android中的SVG图像的各个属性意义
  4. Android中的shape中的属性大全
  5. Android APK文件在电脑上面运行方法
  6. Android App开发基础篇—数据存储(SP和文件)
  7. Android中直接按路径读取properties文件

随机推荐

  1. android创建可拖动的悬浮窗,并实现点击回
  2. Android中的WiFi P2P
  3. Android 热修复(腾讯bugly)
  4. android 存储操作 大小显示换算 kb mb KB
  5. 【Android】glide:3.7.0->4.8.0 升级导入
  6. Android app widget 支持的Layout和widge
  7. Settings中蓝牙连接流程
  8. Activity设置透明背景
  9. Java/Android倒计时(开始,暂停,恢复,停止)
  10. Delphi Android USB声明文件