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

     在开发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
2. 获取相应的属性值

 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的写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值