Android 之 ?attr/ 用法

?attr 是和主题Theme有关,也就是说在Resource资源中定义,在主题Theme中赋值,使用的时候,该值会随着主题的变化而获取的值也是不同的。

一、自定义属性att基本用法
(1)、定义
在values文件夹中创建一个attrs_base.xml,名称随意起。定义一个属性,并给出属性的格式。


    

//reference 是某一个资源的引用,drawable内定义的xml就属于资源。

(2)、赋值

在Theme中赋值,但是要在AndroidManifest.xml中使用该Theme才能生效,否则会报错



    
    


    
    

    
    


    


(3)、 自定义SelfView

public class SelfView extends android.support.v7.widget.AppCompatTextView {

    public SelfView(Context context) {
        this(context,null);
    }

    public SelfView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,R.attr.attr_defStyle); // 使用定义的属性
    }

    public SelfView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.SelfView,defStyleAttr,0);
        String text1 = typedArray.getString(R.styleable.SelfView_text1);
        String text2 = typedArray.getString(R.styleable.SelfView_text2);
        String text3 = typedArray.getString(R.styleable.SelfView_text3);
        String text4 = typedArray.getString(R.styleable.SelfView_text4);
        typedArray.recycle();

        Log.e(getClass().getSimpleName(), "SelfView: " +text1 );
        Log.e(getClass().getSimpleName(), "SelfView: " +text2 );
        Log.e(getClass().getSimpleName(), "SelfView: " +text3 );
        Log.e(getClass().getSimpleName(), "SelfView: " +text4 );

    }

}

(4)、 使用

		

(5)、 输出

 SelfView: xml text1
 SelfView: text2 style_viewStyle
 SelfView: text3 style_attr_defStyleAttr
 SelfView: text4 theme

小结 :

直接在xml中使用的优先
在xml中 style="@style/style_viewStyle"次之
自定义SelfView中使用的defStyleAttr再次之
最后是Theme中的赋值的属性

三、自定义View中format

Android 之 ?attr/ 用法_第1张图片