Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义

博客讨论了一个关于自定义文本框样式的问题,当添加特定样式时,会导致上一行文本的后段部分意外换行。问题出在使用了Spanned.SPAN_INCLUSIVE_EXCLUSIVE标志。分析表明,此标志会影响新输入字符是否受样式影响。通过将标志改为Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,确保新输入的内容不受该样式影响,从而解决了换行问题。
摘要由CSDN通过智能技术生成

问题场景

自定义文本框,点击添加自定义样式会是上一行的后段部分换行显示。
问题代码部分如下:

//自定义样式
NoteCheckBoxSpan span = new NoteCheckBoxSpan(getContext(), R.mipmap.ic_note_edit_uncheck);
SpannableString ss = new SpannableString(String.valueOf(NoteEditorConfig.PlaceHoldChar));
ss.setSpan(span, 0, ss.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

分析

注意到设置自定义span的时候要指定flagSpanned.SPAN_INCLUSIVE_EXCLUSIVE,问题就出现在该部分。
样式影响了上一行导致的换行。

它是用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果。Spanned.SPAN_EXCLUSIVE_EXCLUSIVE (前后都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE (前面包括,后面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE (前面不包括,后面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE (前后都包括)

修改

修改标识为前后都不影响效果,该问题解决

ss.setSpan(span, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值