自定义View属性的两种方式
2017-10-12 本文已影响0人
Humo
一、xml定义style的方法
创建attrs.xml
<declare-styleable name="rainbowbar">
<attr name="rainbowbar_hspace" format="dimension"></attr>
<attr name="rainbowbar_vspace" format="dimension"></attr>
<attr name="rainbowbar_color" format="color"></attr>
</declare-styleable>
继承View类,并重写构造方法
public class LoadingLine extends View {
public LoadingLine(Context context) {
super(context);
}
public LoadingLine(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public LoadingLine(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray t = context.obtainStyledAttributes(attrs,
R.styleable.rainbowbar, 0, 0);
int hSpace = t.getDimensionPixelSize(R.styleable.rainbowbar_rainbowbar_hspace, 100);
int vSpace = t.getDimensionPixelOffset(R.styleable.rainbowbar_rainbowbar_vspace, 100);
int barColor = t.getColor(R.styleable.rainbowbar_rainbowbar_color, Color.GREEN);
t.recycle(); // we should always recycle after used
}
}
二、代码定义style属性
public class BannerAd extends View {
public BannerAd(Context context, String id) {
super(context);
}
public BannerAd(Context context, AttributeSet attrs) {
super(context, attrs);
String namespace = "http://schemas.android.com/apk/lib/com.kok.kok";
String adSize = attrs.getAttributeValue(namespace, "adSize");
String adAnimType = attrs.getAttributeValue(namespace, "adAnimType");
String adUnitId = attrs.getAttributeValue(namespace, "adUnitId");
}
}
使用方式:
由于没有在style样式中声明属性,所以使用控件时需要把自定的命名空间和属性需要手动写上。适用于sdk开发。