理解values—attr文件

2019-08-20  本文已影响0人  leap_

attr全称attribute,意思是属性,性质的意思(个人理解),Android中的attr文件用于描述自定义view的自定义属性

安卓自带的attr属性有常见的比如view的layout_width,id,text都是在attr里描述好的属性。

安卓sdk中attr描述(部分示例)

 <declare-styleable name="TextView">
        <!-- Determines the minimum type that getText() will return.
             The default is "normal".
             Note that EditText and LogTextBox always return Editable,
             even if you specify something less powerful here. -->
        <attr name="bufferType">
            <!-- Can return any CharSequence, possibly a
             Spanned one if the source text was Spanned. -->
            <enum name="normal" value="0" />
            <!-- Can only return Spannable. -->
            <enum name="spannable" value="1" />
            <!-- Can only return Spannable and Editable. -->
            <enum name="editable" value="2" />
        </attr>
        <!-- Text to display. -->
        <attr name="text" format="string" localization="suggested" />
        <!-- Hint text to display when the text is empty. -->
        <attr name="hint" format="string" />
        <!-- Text color. -->
        <attr name="textColor" />
 </declare-styleable>

看过原生的定义了,下面介绍我们如何自定义attr

 1   <declare-styleable name="MyView">
         2  <attr  name ="属性1" format = "这个属性的取值格式">
            3  <enum name="取值1" value="程序中对应的值"/>
               <enum name="取值1" value="程序中对应的值"/>
               <enum name="取值1" value="程序中对应的值"/>
               <enum name="取值1" value="程序中对应的值"/>
            4  <flag name="取值1" value="程序中对应的值" />
               <flag name="取值2" value="程序中对应的值" />
               <flag name="取值3" value="程序中对应的值" />
    </declare-styleable>

声明一个MyView的属性组,属性组下面有很多属性attr,可以用enum,和flag为attr提供默认值选项(可以不填)。

下面介绍一个重要的东西,attr的格式——format:
format的选项
如果想引用attr的值赋值给别的属性:
            android:textColor="?attr/qmui_config_color_gray_5"
            android:textSize="?attr/qmui_common_list_item_detail_h_text_size"

注意attr值在此之前一定被赋值过,才能赋值给别人。

attr值解析

被解析attr示例:

<declare-styleable name="roundedimageview">
        <attr name="border_thickness" format="" />
        <attr name="border_inside_color" format="color" />
        <attr name="border_outside_color" format="color"/>
        <attr name="border_radius" format="dimension"/>
    </declare-styleable>

解析模板

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.属性组名称, defStyleAttr, defStyleRes);
typedArray .getXX(R.styleable.XX_xxx);
typedArray .recycle();

解析示例

        //   这个attr参数是构造方法传来的
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CircularCoverView);
        leftTopRadians = typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_left_top_radius, leftTopRadians);
        leftBottomRadians = typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_left_bottom_radius, leftBottomRadians);
        rightTopRadians = typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_right_top_radius, rightTopRadians);
        rightBottomRadians = typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_right_bottom_radius, rightBottomRadians);
        coverColor = typedArray.getColor(R.styleable.CircularCoverView_cover_color, coverColor);
        typedArray.recycle();

obtainStyledAttributes()用来获得一个TypedArray(一个存放attr属性的数组)


obtainStyledAttributes()

其中set和defStyle可以使用构造传来的参数,attr使用我们自定义的attr属性。

上一篇下一篇

猜你喜欢

热点阅读