Android declare-styleable自定义属性

我们自己定义view,通常继承View,重写构造方法和onDraw等函数,然后具体实现自己定义的复杂view。但是继承这个自定义view的有的属性又各有不同,有的属性在原生属性中没有,这时候就可以使用自定义的属性来便捷的设置相应的属性。

1、在res/values/下新建一个attrs.xml文件。写入这三级标签。并填入相应属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="myStyle">
<attr name="textSize" format="dimension" />
<attr name="backgroud" format="reference" />
<attr name="text" format="string|reference" />
<attr name="textColor" format="color" />
<attr name="yesOrNot" format="boolean" />
<attr name="number">
<enum name="one" value="0" />
<enum name="two" value="1" />
<enum name="leftToRight" value="2" />
<enum name="topToBottom" value="3" />
</attr>
</declare-styleable>
</resources>

2、建立一个自定义视图类,本次偷懒直接继承自textview。然后使用typedarray类来获取控件相应的属性并使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.TextView;
public class MyView extends TextView
{
public MyView(Context context, AttributeSet attrs)
{
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.myStyle);
float textSize = typedArray.getDimension(R.styleable.myStyle_textSize, 15);
Drawable back = typedArray.getDrawable(R.styleable.myStyle_backgroud);
String textString = typedArray.getString(R.styleable.myStyle_text);
int textColor = typedArray.getInt(R.styleable.myStyle_textColor, Color.BLACK);
boolean yesOrNot = typedArray.getBoolean(R.styleable.myStyle_yesOrNot, true);
int number = typedArray.getInt(R.styleable.myStyle_number, 0);
setTextSize(textSize);
setText(textString);
setBackgroundDrawable(back);
setTextColor(textColor);
}
}

Read More
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×