美文网首页
android 自定义控件细节

android 自定义控件细节

作者: codeflame | 来源:发表于2018-10-15 18:38 被阅读0次

    基础转载大佬博客:
    Android 从0开始自定义控件之 自定义 View 基础实例(十)
    Android 从0开始自定义控件之 自定义属性详解(十一)


    obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)

    defStyleAttr:An attribute in the current theme that contains a reference to a style resource that supplies defaults values for the TypedArray. Can be 0 to not look for defaults.
    查找当前主题的属性值(引用类型),提供给TypedArray(返回的结果),设置为0时则不去查找。

    比如属性的定义(取自大佬博客):

    <declare-styleable name="CustomAttribute">
        <attr name="custom_type" format="string"/>
        <attr name="customStyle" format="reference"/>
    </declare-styleable>
    

    主题的中设置的属性值:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="customStyle">@style/DefaultCustomStyle</item>
    </style>
    
    <style name="DefaultCustomStyle">
        <item name="custom_type">2:主题中声明的默认样式属性</item>
    </style>
    

    在这里,defStyleAttr的值只能为R.attr.customStyle。分析如下:
    1.<attr>标签在不在<declare-styleable>(它只是一个分组罢了)里面都没关系,实际都是全局范围内的属性,都能够从R.attr.XXX中访问

    2.customStyle的值是一个引用,由上面代码format="reference"这段定义的

    3.R.attr.customStyle满足官方说明的几个要求:
    (1)当前主题中设置了该属性
    (2)该属性的值是引用类型
    (3)该引用类型是对一个style的引用(即@style/DefaultCustomStyle)
    所以,R.attr.customStyle可以作为参数。
    最终结果:DefaultCustomStyle中的custom_type属性将被获取,给到TypedArray

    其他的R.attr.custom_type、R.styleable.XXX这些都不符合要求。



    defStyleRes:A resource identifier of a style resource that supplies default values for the TypedArray, used only if defStyleAttr is 0 or can not be found in the theme. Can be 0 to not look for defaults.

    类似上面,只不过这里要求细节没那么多。给定一个R.style.XXX就可以了,该样式里面的属性都可以被获取。

    注:上面说的属性值的获取,都只会获取int[] attrs所指定的值。优先级依次为第一个参数、第三个参数、第四个参数所代表的资源。

    相关文章

      网友评论

          本文标题:android 自定义控件细节

          本文链接:https://www.haomeiwen.com/subject/fszfzftx.html