有人认为它可以直接通过在代码类中进行set...(),然后去改变View中的字体大小,颜色等等属性。
那如果要直接在引用布局Layout对其进行设置属性该怎么办呢?
这就是本文重点要介绍的内容:自定义attr属性与读取
一、在res/values 文件下定义一个attrs.xml 文件.代码如下:
注意: format有以下几种类型及读取:
序号
format取值
format说明
format读取
1
reference
资源ID
attrs.getResourceId(R.styleable.View名称_attr名称, 默认值);
2
color
颜色值
attrs.getColor(R.styleable.View名称_attr名称, 默认值);
3
boolean
布尔值
attrs.getBoolean(R.styleable.View名称_attr名称, 默认值);
4
dimension
尺寸值
attrs.getDimension(R.styleable.View名称_attr名称, 默认值);
5
float
浮点值
attrs.getFloat(R.styleable.View名称_attr名称, 默认值);
6
integer
整型值
attrs.getInteger(R.styleable.View名称_attr名称, 默认值);
7
string
字符串
attrs.getString(R.styleable.View名称_attr名称);
8
fraction
百分比(%)
attrs.getString(R.styleable.View名称_attr名称);
9
enum
枚举值
attrs.getInt(R.styleable.View名称_attr名称, 默认值);
10
flag
位或运算
attrs.getInt(R.styleable.View名称_attr名称, 默认值);
二、如果在attr中不同View引用相同属性名字时出现错误的解决方法
(1)引用代码(两个都引用了textColor会出错):
(2)错误提示:
Error:Execution failed for task ':包路径:mergeReleaseResources'.
> 本地包路径\src\main\res\values\attrs.xml: Error: Found item Attr/textColor more than one time(3)解决方式:
三、enum/flag的特殊之处
(1)下面就列举flag(enum也类似),先看代码:
(2)这里是我在自定义一个EditText的时候,为了设置输入内容的类型:
调用方法:
setInputType(attrs.getInt(R.styleable.View名称_inputType, 0));
public void setInputType(int type) {
switch (type) {
case 0:
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);
break;
case 1:
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL);
break;
case 2:
mEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
break;
case 3:
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
break;
case 4:
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
break;
}
}
四、属性的定义与使用
(1)属性定义:
(2)属性使用:
android:layout_width = "42dip"
android:layout_height = "42dip"
android:itemTextColor = "#00FF00"/>
这里推荐:
attr自定义标签详解文章,感觉这里对attr标签在布局中的用法写的蛮好