Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84361
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 693
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-03 13:58
个人简介

淡泊明志,宁静致远

文章分类

全部博文(14)

文章存档

2013年(14)

我的朋友

分类: Android平台

2013-06-27 18:00:51

    在Android中难免会自定义控件,就想官方提供的那些组件一样用xml来定义自定义控件的属性.分为3步:

    1. 定义属性
        在res/values文件下新建一个attrs.xml文件,添加代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.     <declare-styleable name="OrderButton">
  4.         <attr name="order_no" format="reference|string"/>
  5.     </declare-styleable>
  6. </resources>
    定义的属性中格式如上面所示,需要<declare-styleable>标签包围,每一条的属性:<attr name="order_no" format="reference|string"/>
    format的值如下:color, float, boolean, reference, dimension, integer, String, enum.
    enum是不同的,下面的是举例:
  1. <attr name="scaleType">
  2.             <enum name="matrix" value="0" />
  3.             <enum name="fitXY" value="1" />
  4.             <enum name="fitStart" value="2" />
  5.             <enum name="fitCenter" value="3" />
  6.             <enum name="fitEnd" value="4" />
  7.             <enum name="center" value="5" />
  8.             <enum name="centerCrop" value="6" />
  9.             <enum name="centerInside" value="7" />
  10.         </attr>
  
* 如果需要两种不同的属性,可以用"|"分割.

    2. 在布局文件中使用
  1. <RelativeLayout xmlns:android=""
  2.     xmlns:my=""
  3.     android:layout_width="match_parent"
  4.     android:background="@color/g_background"
  5.     android:layout_height="match_parent" >

  6.     <com.shu.apps.widget.OrderButton
  7.         android:id="@+id/btnlv"
  8.         android:layout_height="100dp"
  9.         android:background="@drawable/lv_btn_bg"
  10.         android:text="@string/greet_lv_9"
  11.         my:order_no="1"
  12.         android:textSize="20sp"
  13.         android:layout_width="100dp"/>

  14. </RelativeLayout>
    首先要声明namespace,也就是   xmlns:my=""
    然后使用:my:order_no="1"  

    * "my"可以自定义,"res/"后面必须跟自定义控件的包名,建议直接使用manifestpackage名.

3. 在自定义的控件中获取xml中的值
  1. if (!(attrs == null)) {// 有属性
  2.             TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.OrderButton);
  3.             orderNO = a.getString(R.styleable.OrderButton_order_no);
  4.             a.recycle();
  5.         }
     用“a”的各种方法来获取相应的属性值,需要注意的是:
            如果使用的方法和获取值的类型不对的话,则会返回默认值。因此,如果一个属性是带两个及以上不用类型的属性,需要做多次判断,知道读取完毕后才能判断应该赋予何值.
            * 在取完值的时候别忘了回收资源哦!

android 自定义属性就完了,以后可以使用和扩展了.
阅读(2378) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~