attrs.xml 中 declare-styleable 详解(用于自定义控件的属性)

  1. 框架定义:
<declare-styleable name = "名称">

  <attr name = "……" format = "……" />

</declare-styleable>
  1. color:颜色值,指定这个属性必须输入的是颜色值
<attr name = "textColor" format = "color" />
  1. boolean:布尔值,指定这个属性必须输入的是boolean类型(true/false)
<attr name = "focusable" format = "boolean" />
  1. dimension:尺寸值。注意,这里如果是dp那就会做像素转换为dip
<attr name = "layout_width" format = "dimension" />
  1. float:浮点值。
<attr name="degree" format="float"></attr> 
  1. integer:整型值。
<attr name="startAngle" format="integer"></attr> 
  1. string:字符串
<attr name="text" format="string"></attr> 
  1. fraction:百分数。使用: android:pivotY = “300%”
<attr name = "pivotY" format = "fraction" />
  1. enum:枚举值,设置这个属性必须输入的值。比如style类型,就只能输入STROKE/FILL。在于代码链接的过程中就是传0/1
<attr name="style">
  <enum name="STROKE" value="0"></enum>
  <enum name="FILL" value="1"></enum>
</attr>
  1. flag:是自己定义的,类似于 android:gravity=“top”,就是里面对应了自己的属性值。
 <attr name="weight">              

  <flag name="fat" value="0" />             

   <flag name="mid" value="1" />              

  <flag name="thin" value="2" />          

</attr>  
  1. reference|color:颜色的资源文件。
  2. reference|boolean:布尔值的资源文件

注意:由于reference是从资源文件中获取:所以在XML文件中写这个属性的时候必须 personattr:name="@string/app_name"这种格式,否则会出错

下面将代码和定义的xml文件联系起来
使用时候自定义命名空间

xmlns:app="http://schemas.android.com/apk/res-auto"

获取配置属性

TypedArray tArray = context.obtainStyledAttributes(attrs,R.styleable.PersonAttr);  

自定义变量age,通过TypedArray 对象来获取xml中国的值。如果用户在使用该控件的时候有定义age属性的值,那么就得到用户定义的值,否则就用第二个参数作为默认值,即:如果没定义,那么默认为age = 15

int age = tArray.getInt(R.styleable.PersonAttr_age, 15); 

小栗子

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="PersonAttr">
        <attr name="name" format="reference" />
        <attr name="sex" format="reference" />
        <attr name="age" format="integer" />
        <attr name="weight">
            <flag name="fat" value="2" />
            <flag name="mid" value="1" />
            <flag name="thin" value="0" />
        </attr>
        <attr name="adult" format="boolean" />
        <attr name="textSize" format="dimension" />
    </declare-styleable>
</resources>

使用:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:personattr="http://schemas.android.com/apk/res/com.example.declare_styleable"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.example.declare_styleable.PersonView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        personattr:name="@string/person_name" 
        personattr:weight ="fat"
        personattr:adult ="false"
        personattr:textSize="@dimen/text_size"/>

</RelativeLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值