美文网首页
Android自定义控件之自定义属性

Android自定义控件之自定义属性

作者: LogyKoala | 来源:发表于2018-08-15 00:04 被阅读0次

         在开发Android的时候或多或少都离不开自定义控件,而我们在一个好的自定义控件又离不开自定义属性。原因很简单,我们写某个功能的组件的时候不要局限当前,要把它扩展开来。比如我们当前组件的字体颜色是红色,当产品把它变为绿色的时候我们又要新建一个控件。这是一个很不好的编程习惯。

    1. 在讲自定义属性之前,我来说说我们自定义控件,所重写的构造方法吧

    • 我们自定义控件一般都是继承View、View的子类、ViewGroup.而继承它们之后,系统会要求我们重写三个构造方法。你们知道那三个构造方法在什么时候会被调用吗?


      1-1
    1. 第一个构造方法
      它是我们在代码中用new的方式创建该控件的时候调用
    2. 第二个构造方法
      它是当我们在布局中使用时调用该构造方法
    3. 第三个构造方法

      它是我们在布局中但是布局中有Style的时候调用 1-2
      也就是在布局中这样写的时候调用

    2. 自定义属性

    - 步骤

    1. 在res/value文件夹下新建一个attrs.xml(注:名字可以随便命名,但是建议使用attrs命名)文件
    2-1.jpg

    文件格式如图

    2. attirs.xml中的代码代码中基本上已经包含了所有
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="MyView">
            <attr name="text_color" format="color"/>
            <attr name="text_size" format="dimension"/>
            <attr name="background" format="reference|color"/>
            <attr name="style_type">
                <enum name="number" value="1"/>
                <enum name="text" value="2"/>
            </attr>
        </declare-styleable>
    </resources>
    

    分析一下以上代码代表的含义:
    declare-styleable: 表示一个属性组。它的name可以随便命名但是建议和我们自定义控件的名字一致
    attr:表示单独的一个属性。format代表属性的格式。格式包括很多种:比如颜色,数值,枚举等

    format的格式有
     1、reference 引用类型值 : @id/...
     2、 color 颜色类型值
     3、 boolean 布尔类型值    true , false
     4、 dimension 尺寸类型值     dp / px /sp
     5、 integer 整数类型值
     6、float 浮点型值  
     7、string 字符串类型值 
     8、<enum> 枚举类型值
     9、 flag:位或运算
    10、fraction:百分数
    
    3. 在我们自定义控件中如何获取这些属性
    1. 获取TypedArray对象
        public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyView);
    

    其中有两个参数第一个是构造中的,第二个是attirs.xml中declare-styleable节点下的name

    1. 获取相应的属性值
     textColor =typedArray.getColor(R.styleable.MyView_text_color,textColor);
            textSize =typedArray.getDimensionPixelSize(R.styleable.MyView_text_size,textSize);
            styleType =typedArray.getInt(R.styleable.MyView_style_type,styleType);
    
    1. 释放资源
     typedArray.recycle();
    
    4. 布局中使用
    4-1.jpg
    1. 布局中使用就是1的位置添加命名空间,也不用我们特别记忆,就是在相应位置打app,编译器会给我们自动提示,选择我选中的那个就行 4-2.jpg
    2. 就是使用我们的自定义属性了,也就是图4-1中的2的写法

    相关文章

      网友评论

          本文标题:Android自定义控件之自定义属性

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