android开发教程之自定义属性用法详解
最近项目中经常需要用到自定义控件,因此自定义属性也是经常要用到的,在此说明一下自定义属性的用法:
自定义属性都存在于/value/attr.xml文件中,以如下格式存在。
<resource>
<declare-styleable name="自定义属性名称">
<attr name="属性名称" format="属性种类"/>
......
</declare-styleable>
</resource>
对于自定义属性中的format的值及其含义如下:
format属性值:reference 、color、boolean、dimension、float、integer、string、fraction、enum、flag
1. reference:参考某一资源id。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "background" format = "reference" />
</declare-styleable>
(2)属性使用:
<imageview
android:layout_width="42dip"
android:layout_height="42dip"
android:background="@drawable/图片id"
/>
2.color:颜色值。
(1)属性定义:
<declare-styleablename="名称">
<attrname="textcolor"format="color"/>
</declare-styleable>
(2)属性使用:
<textview
android:layout_width="42dip"
android:layout_height="42dip"
android:textcolor="#00ff00"
/>
3.boolean:布尔值。
(1)属性定义:
<declare-styleablename="名称">
<attrname="focusable"format="boolean"/>
</declare-styleable>
(2)属性使用:
<button
android:layout_width="42dip"
android:layout_height="42dip"
android:focusable="true"
/>
4.dimension:尺寸值。
(1)属性定义:
<declare-styleablename="名称">
<attrname="layout_width"format="dimension"/>
</declare-styleable>
(2)属性使用:
<button
android:layout_width="42dip"
android:layout_height="42dip"
/>
5.float:浮点值。
(1)属性定义:
<declare-styleablename="alphaanimation">
<attrname="fromalpha"format="float"/>
<attrname="toalpha"format="float"/>
</declare-styleable>
(2)属性使用:
<alpha
android:fromalpha="1.0"
android:toalpha="0.7"
/>
6.integer:整型值。
(1)属性定义:
<declare-styleablename="animatedrotatedrawable">
<attrname="visible"/>
<attrname="frameduration"format="integer"/>
<attrname="framescount"format="integer"/>
<attrname="pivotx"/>
<attrname="pivoty"/>
<attrname="drawable"/>
</declare-styleable>
(2)属性使用:
<animated-rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/图片id"
android:pivotx="50%"
android:pivoty="50%"
android:framescount="12"
android:frameduration="100"
/>
7.string:字符串。
(1)属性定义:
<declare-styleablename="mapview">
<attrname="apikey"format="string"/>
</declare-styleable>
(2)属性使用:
<com.google.android.maps.mapview
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apikey="0jokq80od1jl9c6haja99ugxcris2cgjko_bc_g"
/>
8.fraction:百分数。
(1)属性定义:
<declare-styleablename="rotatedrawable">
<attrname="visible"/>
<attrname="fromdegrees"format="float"/>
<attrname="todegrees"format="float"/>
<attrname="pivotx"format="fraction"/>
<attrname="pivoty"format="fraction"/>
<attrname="drawable"/>
</declare-styleable>
(2)属性使用:
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/动画id"
android:fromdegrees="0"
android:todegrees="360"
android:pivotx="200%"
android:pivoty="300%"
android:duration="5000"
android:repeatmode="restart"
android:repeatcount="infinite"
/>
9.enum:枚举值。
(1)属性定义:
<declare-styleablename="名称">
<attrname="orientation">
<enumname="horizontal"value="0"/>
<enumname="vertical"value="1"/>
</attr>
</declare-styleable>
(2)属性使用:
<linearlayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</linearlayout>
10.flag:位或运算。
(1)属性定义:
<declare-styleablename="名称">
<attrname="windowsoftinputmode">
<flagname="stateunspecified"value="0"/>
<flagname="stateunchanged"value="1"/>
<flagname="statehidden"value="2"/>
<flagname="statealwayshidden"value="3"/>
<flagname="statevisible"value="4"/>
<flagname="statealwaysvisible"value="5"/>
<flagname="adjustunspecified"value="0x00"/>
<flagname="adjustresize"value="0x10"/>
<flagname="adjustpan"value="0x20"/>
<flagname="adjustnothing"value="0x30"/>
</attr>
</declare-styleable>
(2)属性使用:
<activity
android:name=".styleandthemeactivity"
android:label="@string/app_name"
android:windowsoftinputmode="stateunspecified|stateunchanged | statehidden">
<intent-filter>
<actionandroid:name="android.intent.action.main"/>
<categoryandroid:name="android.intent.category.launcher"/>
</intent-filter>
</activity>
特别要注意:
属性定义时可以指定多种类型值。
(1)属性定义:
<declare-styleablename="名称">
<attrname="background"format="reference|color"/>
</declare-styleable>
(2)属性使用:
<imageview
android:layout_width="42dip"
android:layout_height="42dip"
android:background="@drawable/图片id|#00ff00"
/>
下面说说attributeset与typedarray在自定义控件中的作用:
attributeset的作用就是在控件进行初始化的时候,解析布局文件中该控件的属性(keyeg:background)与该值(valueeg:@drawable/icon)的信息封装在attributeset中,传递给该控件(view)的构造函数。对于非android自带的属性,在view类中处理时是无法识别的,因此需要我们自己解析。所以这就要用到另外一个类typedarray。在attributeset中我们有属性名称,有属性值,但是控件如何知道哪个属性代表什么意思呢?这个工作就由typedarray来做了。typedarray对象封装了/values/attrs.xml中的styleable里定义的每个属性的类型信息,通过typedarray我们就可以知道attributeset中封装的值到底是干什么的了,从而可以对这些数据进行应用。
attributeset就相当于一盒糖,typedarray就相当于这盒糖上的标签说明,告诉用户每个糖的口味等。这盒糖有什么口味是由用户自己的styleable文件里面的内容来决定的。
上一篇: Tinkpad X100E改XP步骤
下一篇: java反射android的r文件的示例