自定义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
此系列后续持续更新。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值