1、自定义属性
自定义组件往往需要定义一些属性,在Android中自定义组件的属性在values/attrs.xml中声明。一对declare-styleable标签加若干attr子标签声明属性集合和属性,attr标签中的format属性用于设置属性的取值类型。
常用format属性:
- color 颜色类型,可用color资源id(@color/xxxx)或"#00000"赋值
- integer 整型 不带单位
- reference 资源类型 drawable中的一个资源id
- dimension 尺寸类型 带单位(dp、sp等) 多用于宽高和字体大小
- string 文本类型 可以string资源id(@string/xxxx) 或 "xxx" 赋值
自定义的属性在xml布局文件中使用命名空间来进行赋值操作。命名空间名称可随意取,以官方app命名空间为例:
添加命名空间:xmlns:app="schemas.android.com/apk/res-aut…"
例:app:daqiTextSize="20dp"
自定义View一般重写单参、双参和三参的构造方法,并在三参构造方法中进行自定义属性解析。单参构造方法一般用于java代码中new组件时使用,双参构造方法一般在布局中使用<标签/>时调用,三参构造方法在布局中使用<标签/>并使用style样式去分开定义属性。通常需要单参构造方法调用双参构造方法,双参构造方法调用三参构造方法。
在构造方法中根据属性设置的format类型,通过TypedArray对象获相应的值。
对于format为Dimension的属性,可以通过三种方法获取:
1、getDimension()获取一个float类型的精准长度
2、getDimensionPixelOffset()获取一个将小数点去除的int类型长度
3、getDimensionPixelSize()获取一个int类型长度,数值进行四舍五入。
//在values/attr.xml中引用
<attr name="android:text"/>
//在布局中使用
android:text = "daqi"
复制代码
在自定义view获取系统属性:
String text = array.getString(R.styleable.MyTextView_android_text); 使用 R.styleable.自定义属性集合名_android_属性名 获取系统属性
总得来说就是:
1.自定义CustomView(extends View )类
2、在values/attrs中编写styleable和attr标签
3、在布局中使用自定义属性
4、在自定义View的构造方法中通过TypedArray获取自定义属性
延伸:
1、构造方法中的AttributeSet其实就是View属性的集合。
2、使用TypeArray获取属性可以简便获取值的过程,特别对于引用属性被赋予引用资源(R.x.x)时,在AttributeSet中获取的是@id,而使用TypeArray直接获取到引用资源所对应的值。
//AttributeSet text = @2131623981
//TypedArray text = daqi