自定义控件起步(二)(自定义属性)

       自定义控件起步(一)(简单的自定义view)我们画了一个简单地矩形,但这个矩形的颜色是在代码中写死了,

那么我们怎么在布局文件中设置这个矩形的大小呢?这就需要用到自定义属性:

       首先.先说说自定义属性的几种类型:

         1.string   字符串类型,如设置TextView的文字内容为"99999"

         2.color    颜色值类型,如设置TextView的文字颜色为#00FF00

         3.demension   尺寸,大小,如设置TextView的文字大小为13sp   13dp   13px等

         4.integer    整形,,如设置动画的持续时间为100毫秒

         5.enum     枚举类型,,如设置TextView的宽度为为wrap_content  match_parent

         6.reference  引用类型,,如设置TextView的背景为@drawable/ic_launcher

         7.float   浮点类型,,如设置动画从1到0.5

         8,如设置TextView的背景为@drawable/ic_launcher8.boolean  布尔类型,如设置TextView的是否可获取焦点为true    false

         9.fraction   百分比,如设置动画动画的中轴点20%

        10.flag   位或运算,比如设置软键盘"stateUnspecified | stateUnchanged | stateHidden"

接下来,我会接着上一篇,使用自定义属性来设置大小

步骤:

    1.声明自定义属性  我们需要一个颜色,一个宽度,一个高度 

       在values下创建一个自定义attrs的xml文件   会自动生成根布局<resources>,在<resources>里边声明自定义属性

    <declare-styleable name="myView">
        <attr name="rectColor" format="color" />
        <attr name="rectWidth" format="dimension" />
        <attr name="rectHeight" format="dimension" />
    </declare-styleable>
注意: 这里的name是做什么?  这个name用来作为自定义属性集的一个标记,等会我们在构造方法中获取自定义属性会用的到

    2.使用自定义属性

使用之前,我们需要现在早跟布局中添加一个命名空间' 

      xmlns:defind="http://schemas.android.com/apk/res/com.example.defindedview"
还是看一下图吧


注意:com.example.defindedview是包名,那么问题来了,为什么要在这里添加一个命名空间呢?因为自定义属性是我们后来写的,

系统通过命名空间才能找到我们创建的自定义属性.   这就跟为什么我们在布局文件中使用自定义view时为什么要使用类的全名,

是一个原因,你如果就写一个MyView,安卓系统就找不到这个类,就会报一个类找不到的异常

     <com.example.defindedview.MyView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        defind:rectColor="#999"
        defind:rectHeight="100dp"
        defind:rectWidth="250dp" />

     3.在构造方法中获取这些属性值  

    TypedArray这个类里边放了我们属性值

              // 获取矩形颜色,宽度和高度
		TypedArray typedArray = context.getTheme().obtainStyledAttributes(
 				attrs, R.styleable.myView, defStyle, 0);//第三个参数  刚刚提到过  作为自定义属性集合的名称
		int rectColor = typedArray.getColor(R.styleable.myView_rectColor,//<span class="link_title"></span>myView_rectColor  前边是属性集合的名称,后边是属性名称
				Color.GRAY);
		int rectWidth = typedArray.getDimensionPixelSize(
				R.styleable.myView_rectWidth, dip2px(context, 30));
		int rectHeight = typedArray.getDimensionPixelSize(
				R.styleable.myView_rectHeight, dip2px(context, 20));
		typedArray.recycle();//一定要记得回收
		Log.e("TAG", "rectColor=" + rectColor + ",rectWidth=" + rectWidth
				+ ",rectHeight=" + rectHeight);
      上边我们将获取到的属性值通过Log打印出来,下面我们运行一下,看下Log日志:


     这个时候,我们已经能获取到我们的自定义属性值了

      4.使用自定义属性值  将刚才获取的颜色值设置给画笔   将宽和高设置给矩形

               mPaint.setColor(rectColor);// 设置画笔颜色
		mRect = new Rect(0, 0, rectWidth, rectHeight);

     运行一下,效果如下:



     到这你基本上已经掌握自定义属性的使用步骤了,点击这里下载源码




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值