自定义View attr

效果

自定义View attr_第1张图片

来个简单的自定义TextView,把设置文字颜色zxyTextColor属性暴露出去

attr_zxy.xml




    
        
    
ZxyTextView.kt

/**
 * Created by zxy on 2020/4/18 0018 16:02
 * ******************************************
 * * 简单的自定义View
 * ******************************************
 */
class ZxyTextView : androidx.appcompat.widget.AppCompatTextView {
    var zxyColor: Int = Color.BLACK
    constructor(mContext: Context?, attrs: AttributeSet?) : super(mContext,attrs) {
        //取出自定义Attr的属性分组
        val array =
                context!!.theme.obtainStyledAttributes(attrs, R.styleable.zxy, R.attr.zxyTextColor, 0)
        //遍历,这边只有一个自定义attr属性,循环可有可无
        for (index in 0..array.indexCount step 1) {
            when (array.getIndex(index)) {
                R.styleable.zxy_zxyTextColor ->
                    //得到xml中传入的颜色值
                    zxyColor = array.getColor(R.styleable.zxy_zxyTextColor, Color.BLACK)
            }
        }
        array.recycle()//回收
        init()
    }

    /**
     * 初始化内容
     */
    private fun init() {
        this.setTextColor(zxyColor)//设置TextView的文字颜色为xml传入的颜色
    }
}

布局文件中的app:zxyTextColor="#1425DF" 属性为暴露出去的属性

总结:集成View或者ViewGroup的也是一样,只需要注意    绘制View的方法+事件分发+画笔+(矢量图、属性)动画就Ok

 
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
 when (array.getIndex(index)) {
                R.styleable.ZXY_zxyBackgroundColor ->
                    backgroundColor = array.getColor(R.styleable.ZXY_zxyBackgroundColor, Color.BLACK)
                R.styleable.ZXY_zxyRightTextColor ->
                    rightTextColor = array.getColor(R.styleable.ZXY_zxyRightTextColor, Color.BLACK)
                R.styleable.ZXY_zxyTitleTextColor ->
                    titleTextColor = array.getColor(R.styleable.ZXY_zxyTitleTextColor, Color.BLACK)
                R.styleable.ZXY_zxyRightText ->
                    rightText = array.getString(R.styleable.ZXY_zxyRightText)
                R.styleable.ZXY_zxyTitleText ->
                    titleText = array.getString(R.styleable.ZXY_zxyTitleText)
                R.styleable.ZXY_zxyRightImg1 ->
                    rightImg1 = array.getResourceId(R.styleable.ZXY_zxyRightImg1,-1)
                R.styleable.ZXY_zxyLeftImg ->
                    leftImg = array.getResourceId(R.styleable.ZXY_zxyLeftImg,-1)
                R.styleable.ZXY_zxyRightImg2 ->
                    rightImg2 = array.getResourceId(R.styleable.ZXY_zxyRightImg2,-1)
                R.styleable.ZXY_zxyTitleSize ->
                    titleSize = array.getDimensionPixelSize(R.styleable.ZXY_zxyTitleSize, 18)
                R.styleable.ZXY_zxyRightTitleSize ->
                    rightTextSize = array.getDimensionPixelOffset(R.styleable.ZXY_zxyRightTitleSize, 18)
            }

附:format 数据类型参考

1. reference:参考某一资源ID。

    (1)属性定义:

            

                   

            

    (2)属性使用:

            

2. color:颜色值。

    (1)属性定义:

            

                   

            

    (2)属性使用:

            

3. boolean:布尔值。

    (1)属性定义:

            

                

            

    (2)属性使用:

            

 

你可能感兴趣的:(Kotlin)