贵在总结
自定义属性
- 声明自定义的View要使用系统已经定义的属性,格式:
<resources>
<declare-styleable name="命名空间">
<attr name=“android:系统属性名"/>
</declare-styleable>
</resources>
- 声明增加的自定义的属性,格式:
<resources>
<declare-styleable name="命名空间">
<attr name=属性名" format="属性值的类型" />
</declare-styleable>
</resources>
属性值的类型
类型 | 说明 |
---|---|
reference | 引用资源类型,资源id |
color | 颜色值 |
boolean | 布尔值 |
dimension | 尺寸值 |
float | 浮点值 |
integer | 整型值 |
string | 字符串 |
fraction | 百分数 |
enum | 枚举值 |
flag | 位或运算 |
混合类型 | 可以指定多种类型值 |
- 声明
<declare-styleable name="DefineView">
<attr name="drawable" format="reference" />
<attr name="textColor" format="color" />
<attr name="enable" format="boolean" />
<attr name="height" format="dimension" />
<attr name="fromAlpha" format="float" />
<attr name="num" format="integer" />
<attr name="text" format="string" />
<attr name="centerX" format="fraction" />
<attr name="orientation">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
<attr name="gravity">
<flag name="top" value="0x30" />
<flag name="bottom" value="0x50" />
<flag name="left" value="0x03" />
<flag name="right" value="0x05" />
<flag name="center_vertical" value="0x10" />
<flag name="fill_vertical" value="0x70" />
<flag name="center_horizontal" value="0x01" />
<flag name="fill_horizontal" value="0x07" />
<flag name="center" value="0x11" />
<flag name="fill" value="0x77" />
<flag name="clip_vertical" value="0x80" />
<flag name="clip_horizontal" value="0x08" />
<flag name="start" value="0x00800003" />
<flag name="end" value="0x00800005" />
</attr>
<attr name="background" format="reference|color" />
</declare-styleable>
- 使用
声明命名空间:
xmlns:user="http://schemas.android.com/apk/res-auto"
自定义view中使用
<com.example.view.DefineView
android:id="@+id/dv_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
user:enable="true"/>
Java文件中获取属性值
public DefineView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.defineview, this, true);
TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.DefineView);
mDrawable = typedArray.getDrawable(R.styleable.DefineView_drawable);
mNum = typedArray.getInt(R.styleable.ExpandableTextView_maxCollapsedLines, DEFAULT_NUM);
typedArray.recycle();
}