自定义view系列---自定义属性
我们在自定义view的时候,经常会需要自定义属性。比如上篇讲的继承View实现TextView,因为是直接继承View的,所以该自定义view就没有android:text属性了,但是对于一个TextView来说,text属性又是十分重要的,否则在使用该自定义的TextView时,就不能为该View设置text值了,那这个view还能叫做TextView吗?
要解决这个问题,就需要用到view的自定义属性,这个知识点有比较固定的用法,同时比较容易理解。
我们现在就给上面的MyTextView来添加一个text属性
1,在res/values下创建 attrs.xml文件,并添加如下内容后:
<declare-styleable name="MyTextView">
<attr name="text" format="string"/>
</declare-styleable>
-
name=“MyTextView” ===>一般自定义的属性name值与自定义的View保持一致
-
attr中的 attr name=“text”,这个name值就是自定义属性的名称了,在layout中使用这个自定义view,就可以使用这个属性名称来设置值。
-
format=“string” 是属性值的类型,总共有如下类型
-
string:字符串
-
boolean:布尔
-
color:颜色
-
dimension:尺寸,可以带单位,比如长度通常为 dp,字体大小通常为 sp
-
enum:枚举,需要在 attr 标记中使用标记定义枚举值,例如 sex 作为性别,有两个枚举值:MALE 和 FEMALE。
-
flag:标识位,常见的 gravity 属性就是属性该类型,如图 6-7 所示。
-
float:浮点数
-
fraction:百分数,在动画资源、等标记中,fromX、fromY 等属性就是
-
fraction 类型的属性
-
integer:整数
-
reference : 引用, 引 用 另一个资源 , 比 如 android:paddingRight=@dimen/activity_horizontal_margin"就是引用了一个尺寸资源
2,属性在attrs.xml中定义好后,就可以在layout中使用了
首先要在加载该view的layout中的根view添加命名空间
xmlns:cyy=“http://schemas.android.com/apk/res-auto”
<com.example.cyy.customerview.view.MyTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#6600ff00"
cyy:text="Android 自定义组件学习"/>
3,在java代码中获取该属性值
public MyTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyTextView);
String customerText = typedArray.getString(R.styleable.MyTextView_text);
typedArray.recycle();//注意通过TypedArray得到数据后要调用其recycle方法。
}
这样我们就成功设置了一个自定义view属性,并且在layout中使用了这个属性,最后在java代码中读到设置的属性值了。
DONE
此系列后续持续更新。
本文地址:https://blog.csdn.net/u010869159/article/details/108123039