1、 在values文件夹下新建xml文件,命名为attrs.xml, 在该文件中添加你的自定义属性,例如:
<declare-styleable name="MyView">
<attr name="rightPadding" format="dimension"></attr>
</declare-styleable>
首先要定义命名空间xmlns:test="http://schemas.android.com/apk/res/packageName"
命名根据喜好可以随便取,URL中packageName为你项目的包名
具体使用:
<com.example.views.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"
test:rightPadding="100dp" />
在使用了自定义的属性后,会调用控件的带三个参数的构造函数,需要在该函数中进行读取操作
public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// 获取自定义的属性
TypedArray arr = context.getTheme().obtainStyledAttributes(attrs,
R.styleable.MyView, defStyle, 0);
int count = arr.getIndexCount();
for (int i = 0; i < count; ++i) {
int attr = arr.getIndex(i);
switch (attr) {
case R.styleable.SlidingMenu_rightPadding:
int rightPadding = arr.getDimensionPixelSize(attr, (int) TypedValue // 默认值,这里添加了dp、px的转换
.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
60, context.getResources()
.getDisplayMetrics()));
break;
default:
break;
}
}
arr.recycle(); // 必须释放
}
1. reference:参考某一资源ID。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "background" format = "reference" />
</declare-styleable>
2. color:颜色值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "textColor" format = "color" />
</declare-styleable>
3. boolean:布尔值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "focusable" format = "boolean" />
</declare-styleable>
4. dimension:尺寸值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "layout_width" format = "dimension" />
</declare-styleable>
5. float:浮点值。
(1)属性定义:
<declare-styleable name = "AlphaAnimation">
<attr name = "fromAlpha" format = "float" />
<attr name = "toAlpha" format = "float" />
</declare-styleable>
6. integer:整型值。
(1)属性定义:
<declare-styleable name = "AnimatedRotateDrawable">
<attr name = "visible" />
<attr name = "frameDuration" format="integer" />
<attr name = "framesCount" format="integer" />
<attr name = "pivotX" />
<attr name = "pivotY" />
<attr name = "drawable" />
</declare-styleable>
7. string:字符串。
(1)属性定义:
<declare-styleable name = "MapView">
<attr name = "apiKey" format = "string" />
</declare-styleable>
8. fraction:百分数。
(1)属性定义:
<declare-styleable name="RotateDrawable">
<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>
9. enum:枚举值。
(1)属性定义:
<declare-styleable name="名称">
<attr name="orientation">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
</declare-styleable>
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>
注意:
属性定义时可以指定多种类型值。
(1)属性定义:
<declare-styleable name = "名称">
<attr name = "background" format = "reference|color" />
</declare-styleable>