TypedArray和attrs.xml和AttributeSet这一系列都是自定义控件属性时要用到的内容。
首先说说attrs.xml:它是定义成类似于这种形式的。
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <declare-styleablename="MyView">
- <attrname="textColor"format="color"></attr>
- <attrname="textSize"format="dimension"/>
- </declare-styleable>
- </resources>
1.主要讲讲里面的format属性:
①. reference:参考某一资源ID。
(1)属性定义:
- <declare-styleablename="名称">
- <attrname="background"format="reference"/>
- </declare-styleable>
(2)属性使用:
- <ImageView
- android:layout_width="42dip"
- android:layout_height="42dip"
- android:background="@drawable/图片ID"
- />
②. color:颜色值。
(1)属性定义:
- <declare-styleablename="名称">
- <attrname="textColor"format="color"/>
- </declare-styleable>
(2)属性使用:
- <TextView
- android:layout_width="42dip"
- android:layout_height="42dip"
- android:textColor="#00FF00"
- />
③. boolean:布尔值。
(1)属性定义:
- <declare-styleablename="名称">
- <attrname="focusable"format="boolean"/>
- </declare-styleable>
(2)属性使用:
- <Button
- android:layout_width="42dip"
- android:layout_height="42dip"
- android:focusable="true"
- />
④. dimension:尺寸值。
(1)属性定义:
- <declare-styleablename="名称">
- <attrname="layout_width"format="dimension"/>
- </declare-styleable>
(2)属性使用:
- <Button
- android:layout_width="42dip"
- android:layout_height="42dip"
- />
⑤. 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"
- />
⑥. 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"
⑦. 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"
- />
⑧. 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"
- />
⑨. 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>
- <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"
- />
下面是一个布局文件:
- <?xml
- version="1.0"encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- //自定义的View的路径为com.xc.demo
- xmlns:test="http://schemas.android.com/apk/res/com.xc.demo"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <com.xc.demo.MyView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- //这里引用改变字体和颜色 textColor和textSize都是根据前面的attrs.xml文件设置的
- test:textSize="100dp"
- test:textColor="#ff0000"
- />
- </LinearLayout>
2.TypedArray的作用是在代码中设置。
- publicMyView(Contextcontext,AttributeSetattrs){
- this(context);
- TypedArraya=context
- .obtainStyledAttributes(attrs,R.styleable.MyView);
- intcolor=a.getColor(R.styleable.MyView_textColor,0XFF0000FF);
- floatsize=a.getDimension(R.styleable.MyView_textSize,50);
- mPaint.setColor(color);
- mPaint.setTextSize(size);
- a.recycle();
- }
R.styleable.MyView是attrs.xml中<declare-styleable name="MyView">的名字
具体的设置是依靠名字+"_"+名字得到来设置的。
3.如果代码和xml中都设置了,一般以xml中设置为先。
本文出自 “千寻” 博客,请务必保留此出处http://www.jb51.cc/article/p-gpxgtuvz-ue.html