无法在短信横屏界面收件人控件中复制粘贴

无法在短信横屏界面收件人控件中复制粘贴

[DESCRIPTION]

1.打开短信,并新建短信
2.从联系人中选择联系人作为收件人
3.点击收件人空白区域弹出编辑框
4.长按文本,通过Edit按钮选择复制、粘贴、剪切等功能

[Expected result]

希望可以进行复制、粘贴、剪切等功能。

[SOLUTION]

为平台限制,分析如下:
一般TextView在Cursor移动或是选取了一段范围时会执行一个callback function
onSelectionChanged
在MMS中收件人处使用的是RecipientEditTextView,Google原本设计RecipientEditTextView的行为是一旦文字形成chip之后就不允许做选取,在
onSelectionChanged中一旦发现Cursor试图移动到Chip前面,就会强制把Cursor的位置移到最后面去
Android原本设计,如果一个EditText在focus中将手机由直屏转横屏,InputMethodService会主动弹出一个由ExtractEditText +键盘组成的全屏接
口,让用户输入时可以看得比较清楚不会被键盘挡住
ExtractEditText的内容是将背后的RecipientEditTextView的内容反馈出来,实际上此时做的任何操作(输入文字、删除文字、剪下、贴上等等),改
变的都是背后的RecipientEditTextView,而RecipientEditTextView发现内容改变了,便会通知ExtractEditText去改变内容,让前后的内容同步
在ExtractEditText做选取时RecipientEditTextView也会被通知,但由于RecipientEditTextView在onSelectionChanged会把Cursor强制移到最后面
去,所以事实上选取区域是甚么东西都没选到(因为此时selectStart == selectEnd)
目前Android的设计,ExtractEditText并不会被通知背后RecipientEditTextView的选取范围改变了,所以依然保持着自己的选取范围
而ExtractEditText发现有文字被选取了,就会启动文字编辑功能(全选、剪切、复制等),但事实上真正的选取范围是空的,所以执行这些功能都会
无效
结论:
这个现象是Android原本的设计所导致
ExtractEditText是存在在另外一个process, RecipientEditTextView并不知道它的存在,如果要修正这个问题需要让RecipientEditTextView在选
取区域改变时要想办法通知ExtractEditText把其选取区域做同步更新,这种架构上的改变会伴随比较高的风险,故不建议变更。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值