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>  

四、运行之效果如下图:


更多相关文章

  1. Android根文件系统的启动过程
  2. 系出名门Android(1) - 在 Windows 下搭建 Android(安卓)开发环境
  3. android之LinearLayout中android:layout_weight属性理解
  4. Android(安卓)应用程序快速启动的秘诀
  5. android中的SVG图像的各个属性意义
  6. 【Android(安卓)应用开发】Android资源文件 - 使用资源存储字符
  7. Android之NDK开发修补版
  8. ImageView之android:tint=" "属性方法作用详解
  9. Android中的shape中的属性大全

随机推荐

  1. Android HTTPS 导读
  2. Android使用自定义View继承SurfaceView实
  3. Android(安卓)Bitmap 改变的时候可能会抛
  4. Android Context完全解析,Context你用对了
  5. RadioButton样式自定义
  6. Android之分頁效果-ViewPager、Indicator
  7. Android使用OKHttp3实现下载(断点续传、
  8. 使Android开发方便快捷的8个好工具
  9. Android中Intent对象与Intent Filter过滤
  10. Android使用局和数据实现天气项目-androi