1. Reference:引用类型,参考某一资源ID
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "background" format = "reference"/>
<attr name = "src" format = "reference" />
</declare-styleable>
(2)属性使用:
<ImageView android:layout_width = "42dip"
android:layout_height = "42dip"
android:background = "@drawable/图片ID"/>
2. color:颜色值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "textColor" format = "color"/>
</declare-styleable>
(2)属性使用:
<TextView android:layout_width = "42dip"
android:layout_height = "42dip"
android:textColor = "#00FF00"/>
3. boolean:布尔值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "focusable" format = "boolean"/>
</declare-styleable>
(2)属性使用:
<Button android:layout_width = "42dip"
android:layout_height = "42dip"
android:focusable = "true"/>
4. dimension:尺寸值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "layout_width" format = "dimension"/>
<attr name = "layout_height" format = "dimension"/>
</declare-styleable>
(2)属性使用:
<Button android:layout_width = "42dip"
android:layout_height = "42dip"/>
5. float:浮点值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "fromAlpha" format = "float"/>
<attr name = "toAlpha" format = "float"/>
</declare-styleable>
(2)属性使用:
<alpha android:fromAlpha = "1.0" android:toAlpha = "0.7"/>
6. integer:整型值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "visible"/>
<attr name = "frameDuration" format="integer"/>
<attr name = "framesCount" format="integer"/>
<attr name = "pivotX"/><attr name = "pivotY"/>
<attr name = "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-styleable name = "名称">
<attr name = "text" format = "string" />
</declare-styleable>
(2)属性使用:
<TextView
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:text ="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"/>
8. fraction:百分数类型。
(1)属性定义:
<declare-styleable name="名称">
<attr name = "visible"/>
<attr name = "fromDegrees" format = "float"/>
<attr name = "toDegrees" format = "float"/>
<attr name = "pivotX" format = "fraction"/>
<attr name = "pivotY" format = "fraction"/>
<attr name = "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-styleable name="名称">
<attr name="orientation">
<enum name="horizontal" value="0"/>
<enum name="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-styleable name="名称">
<attr name="windowSoftInputMode">
<flag name = "stateUnspecified" value = "0"/>
<flag name = "stateUnchanged" value = "1"/>
<flag name = "stateHidden" value = "2"/>
<flag name = "stateAlwaysHidden" value = "3"/>
<flag name = "stateVisible" value = "4"/>
<flag name = "stateAlwaysVisible" value = "5"/>
<flag name = "adjustUnspecified" value = "0x00"/>
<flag name = "adjustResize" value = "0x10"/>
<flag name = "adjustPan" value = "0x20"/>
<flag name = "adjustNothing" value = "0x30"/>
</attr></declare-styleable>
(2)属性使用:
<activity android:name = ".StyleAndThemeActivity"
android:label = "@string/app_name"
android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
<intent-filter><action android:name = "android.intent.action.MAIN"/>
<category android:name = "android.intent.category.LAUNCHER"/>
</intent-filter></activity>
注意:
属性定义时可以指定多种类型值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "background" format = "reference|color"/>
</declare-styleable>
(2)属性使用:
<ImageView android:layout_width = "42dip"
android:layout_height = "42dip"
android:background = "@drawable/图片ID|#00FF00"/>
这是因为系统帮我们测量的高度和宽度都是MATCH_PARNET,当我们设置明确的宽度和高度时,系统帮我们测量的结果就是我们设置的结果,当我们设置为WRAP_CONTENT或者MATCH_PARENT系统帮我们测量的结果就是MATCH_PARENT的长度。
所以,当设置了WRAP_CONTENT时,我们需要自己进行测量,即重写onMesure方法,重写之前先了解下MeasureSpec的specMode的类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用
下面是我们重写onMeasure代码:
现在我们可以对高度、宽度进行随便的设置了,基本可以满足我们的需求。
当然了我们这个自定义View与TextView相比还没什么区别,但是前面的例子已经提到,我们可以给View添加一些监听事件,代码就不写了,想看的话可以下载源码。
参考: