欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

自定义view系列---自定义属性

程序员文章站 2022-06-25 15:02:48
我们在自定义view的时候,经常会需要自定义属性。比如上篇讲的继承View实现TextView,因为是直接继承View的,所以该自定义view就没有android:text属性了,但是对于一个TextView来说,text属性又是十分重要的,否则在使用该自定义的TextView时,就不能为该View设置text值了,那这个view还能叫做TextView吗?要解决这个问题,就需要用到view的自定义属性,这个知识点有比较固定的用法,同时比较容易理解。我们现在就给上面的MyTextView来添加一个tex...

我们在自定义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” 是属性值的类型,总共有如下类型
    自定义view系列---自定义属性

  • 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

相关标签: Android View