[源码]TextView源码

提起TextView,脑子里想着用起来应该是很简单的,然而作为显示文字的所有控件的基类,想要完全挖掘出TextView的能力,还是很复杂的。最近做一个需求,要在限制长度的输入框里识别粘贴的淘口令,因为对TextView了解太肤浅,bug无数,特意看一下源码学习一下(听iOS同学说,各个平台的对外接口都比较接近,这也是一个认知文字系统的好方法)。
主要关注TextView对外暴露的set接口,以及hook。
- TransformationMethod
对外提供了对文字进行转换的接口。回调时机是在beforeTextChanged和onTextChanged之间。也就是说这两个回调给出的修改内容可能是不一致的。同时,这个是个set方法,不是add方法,所以会相互覆盖。setAllCaps、是用这个接口实现的。
- TextWatcher
变化的回调,在setText时回调。同时会作为span传给Editable,Editable在变化时,也会回调。神奇的设置
- MovementMethod
初始化回调时机是在beforeTextChanged和onTextChanged之间。调用对应回调的时机比较混乱,而且并没有统一的短路逻辑。
- OnEditorActionListener,EditorAction回调
- InputFilter,目前只有最长输入字符控制在用,回调在beforeTextChanged之前。inflate时,如果没有设置maxLength会清空
- KeyListener,允许输入内容的规范。
- 直接搞的,各种各样的flag。
- setAutoLinkMask,在beforeTextChanged和onTextChanged之间对链接进行处理
- setCompoundDrawables,在onDraw时候画上去的,会调用requestLayout
- setCustomSelectionActionModeCallback,自定义menu实例
- setEllipsize,在TextUtils里处理,BoringLayout使用
- set各种最大最小,onMeasure用到
- setImeActionLabel,可以定制化键盘行为

顺便记一下Spanned#SPAN_xxCLUSIVE_xxCLUSIVE的作用:
以输入发生在Span前,如果是Inclusive,新输入的内容自带span。如果是Exclusive则不带span。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值