我使用与this question相同的标题,因为我认为我的问题与那个问题非常相似,我仔细阅读并测试了接受的答案,但是接受的答案并不适用于我。让我来描述一下我的问题:
我的代码如下:
EditText myEdit = (EditText) this.findViewById(R.id.myedit);
myEdit.setText("a\nb\n");
Spannable s = myEdit.getText();
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
s.setSpan(new BulletSpan(30), 4, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
myEdit.setText(s);
我想看到的是:
我尝试了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), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 4, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
myEdit.setText(s);
然后我得到了预期的结果:
我正在使用富文本编辑器,当用户点击子弹图标时,我需要显示一个空子弹,但现在我不确定问题可能是什么,因为我想制作一个新的空BulletSpan(只有一个点,但后面没有字符),但如果跨度的开始和结束没有字符,则点不会显示。
答案 0 :(得分:11)
这是一个丑陋的解决方案,但我没有找到任何更好的 - 尝试最后添加一个空字符(类似于零宽度空间)。这产生了你想要的结果(至少在视觉上):
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);
}
结果是:
理想情况下,我会创建一个自定义EditText
类,在内部附加此字符,但在将文本发送到任何其他对象时将其删除。
答案 1 :(得分:2)
这样好吗?
EditText myEdit = (EditText) this.findViewById(R.id.myedit);
myEdit.setText("a\nb\n\n");
Spannable s = myEdit.getText();
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
myEdit.setText(s);
myEdit.setSelection(s.length()-1);
结果是
答案 2 :(得分:1)
我有一个简单的解决方案,只需在换行符的末尾添加一个空格
EditText myEdit = (EditText) this.findViewById(R.id.myedit);
myEdit.setText("a\nb\n "); //notice the space after newline
Spannable s = myEdit.getText();
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
s.setSpan(new BulletSpan(30), 4, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
myEdit.setText(s);