自定义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开发。

上一篇下一篇

猜你喜欢

热点阅读