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

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

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

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


    Android自定义控件之自定义属性_第1张图片
    1-1
  1. 第一个构造方法
    它是我们在代码中用new的方式创建该控件的时候调用
  2. 第二个构造方法
    它是当我们在布局中使用时调用该构造方法
  3. 第三个构造方法

    它是我们在布局中但是布局中有Style的时候调用
    Android自定义控件之自定义属性_第2张图片
    1-2

    也就是在布局中这样写的时候调用

2. 自定义属性

- 步骤

1. 在res/value文件夹下新建一个attrs.xml(注:名字可以随便命名,但是建议使用attrs命名)文件
Android自定义控件之自定义属性_第3张图片
2-1.jpg

文件格式如图

2. attirs.xml中的代码代码中基本上已经包含了所有


    
        
        
        
        
            
            
        
    

分析一下以上代码代表的含义:
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、 枚举类型值
 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. 布局中使用
Android自定义控件之自定义属性_第4张图片
4-1.jpg
  1. 布局中使用就是1的位置添加命名空间,也不用我们特别记忆,就是在相应位置打app,编译器会给我们自动提示,选择我选中的那个就行
    Android自定义控件之自定义属性_第5张图片
    4-2.jpg
  2. 就是使用我们的自定义属性了,也就是图4-1中的2的写法

你可能感兴趣的:(Android自定义控件之自定义属性)