博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android使用AttributeSet自定义控件的方法
阅读量:6995 次
发布时间:2019-06-27

本文共 2822 字,大约阅读时间需要 9 分钟。

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

下面就来演示一下粗略步骤:##

<ol><li> 在res/values 文件下定义一个attrs.xml 文件.代码如下:

<li>我们在DemoView.java 代码修改如下,其中下面的构造方法是重点,我们获取定义的属性我们R.sytleable.DemoView_textColor, 获取方法中后面通常设定默认值(float textSize = a.getDimension(R.styleable.DemoView_textSize, 36 ); ) 防止我们在xml 文件中没有定义.从而使用默认值!

获取,DemoView 就是定义在<declare-styleable name="DemoView "></declare-styleable> 里的 名字,获取里面属性用** 名字_ 属性** 连接起来就可以.TypedArray 通常最后调用** .recycle()** 方法,为了保持以后使用该属性一致性!

public DemoView(Context context,AttributeSet attrs)      {          super(context,attrs);          mPaint = new Paint();                    TypedArray a = context.obtainStyledAttributes(attrs,                  R.styleable.DemoView);                    int textColor = a.getColor(R.styleable.DemoView_textColor,                  0XFFFFFFFF);          float textSize = a.getDimension(R.styleable.DemoView_textSize, 36);                    mPaint.setTextSize(textSize);          mPaint.setColor(textColor);                    a.recycle();      }

DemoView.java 全部代码如下:

package com.android.demo;  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 DemoView extends View {      private Paint mPaint;      private Context mContext;      private static final String mString = "Welcome to Mr Samson's blog";            public DemoView (Context context) {          super(context);          mPaint = new Paint();      }      public DemoView (Context context,AttributeSet attrs)      {          super(context,attrs);          mPaint = new Paint();                    TypedArray a = context.obtainStyledAttributes(attrs,                  R.styleable.MyView);                    int textColor = a.getColor(R.styleable.DemoView_textColor,                  0XFFFFFFFF);          float textSize = a.getDimension(R.styleable.DemoView_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);      }  }

<li>将我们自定义的DemoView 加入布局main.xml 文件中,平且使用自定义属性,自定义属性必须加上:

**xmlns:test =" "蓝色 是自定义属性的前缀,红色 **是我们包名.
main.xml 全部代码如下:

转载地址:http://undvl.baihongyu.com/

你可能感兴趣的文章
Java多线程7:死锁
查看>>
概率图形模型(PGM)学习笔记(四)-贝叶斯网络-伯努利贝叶斯-贝叶斯多项式...
查看>>
worker_pool的例子
查看>>
设计模式之构造者模式
查看>>
MySQL旧版本ORDER BY 方法
查看>>
人体感应模块控制LCD1602背景灯是否开启
查看>>
【转】轻松记住大端小端的含义(附对大端和小端的解释)
查看>>
(转)gethostbyname() -- 用域名或主机名获取IP地址
查看>>
Android 插件化
查看>>
Yii2的深入学习--自动加载机制
查看>>
sqlserver修改增删改字段
查看>>
Android实现异步处理 -- HTTP请求
查看>>
设计模式介绍、分类、原则
查看>>
超级好用的解析JSON数据的网站
查看>>
C#正则表达式匹配任意字符
查看>>
window.showModalDialog 子窗口和父窗口不兼容最新的谷歌
查看>>
Objective-c中@interface、@implementation、@protocal
查看>>
TEST DESIGN TECHNIQUES: AN OVERVIEW
查看>>
jQuery-1.9.1源码分析系列(十) 事件系统——事件绑定
查看>>
Python yield 使用浅析
查看>>