我使用与
this question相同的标题,因为我认为我的问题非常类似,我仔细阅读并测试了接受的答案,但是接受的答案对我不起作用.让我来描述一下我的问题:
我的代码看起来像:
- EditText myEdit = (EditText) this.findViewById(R.id.myedit);
- myEdit.setText("a\nb\n");
- Spannable s = myEdit.getText();
- s.setSpan(new BulletSpan(30),1,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- s.setSpan(new BulletSpan(30),2,3,4,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- myEdit.setText(s);
我想看到的是:
> a
> b
> [我想在这里看到第3个子弹,但它没有显示]
我尝试了Spannable.SPAN_INCLUSIVE_INCLUSIVE,Spannable.SPAN_INCLUSIVE_EXCLUSIVE,Spannable.SPAN_EXCLUSIVE_INCLUSIVE,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,但这些标志都不适用于我.
如果我使用这些代码:
- EditText myEdit = (EditText) this.findViewById(R.id.myedit);
- myEdit.setText("a\nb\nc");
- Spannable s = myEdit.getText();
- s.setSpan(new BulletSpan(30),Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
- s.setSpan(new BulletSpan(30),5,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
- myEdit.setText(s);
然后我得到了预期的结果:
> a
> b
> c
我正在使用富文本编辑器,当用户单击子弹图标时,我需要显示一个空子弹,但现在我不确定问题可能是什么,因为我想创建一个新的空BulletSpan(只有一个点,但是在它之后没有字符),但是如果跨度的开始和结束中没有字符,则点不会显示.
解决方法
这是一个丑陋的解决方案,但我没有找到任何更好的 – 尝试最后添加一个空字符(像零宽度空间).这产生了你想要的结果(至少在视觉上):
- public void setBulletText(EditText myEdit,String text) {
- String[] lines = TextUtils.split(text,"\n");
- SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
- String line = null;
- for (int index = 0; index < lines.length; ++index) {
- line = lines[index];
- int length = spannableStringBuilder.length();
- spannableStringBuilder.append(line);
- if (index != lines.length - 1) {
- spannableStringBuilder.append("\n");
- } else if (TextUtils.isEmpty(line)) {
- spannableStringBuilder.append("\u200B");
- }
- spannableStringBuilder.setSpan(new BulletSpan(30),length,length + 1,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- }
- myEdit.setText(spannableStringBuilder);
- }
结果是: