使用bulletspan时换行不正确
Posted
技术标签:
【中文标题】使用bulletspan时换行不正确【英文标题】:Incorect line wrapping when using bulletspan 【发布时间】:2014-03-09 07:22:34 【问题描述】:我现在尝试解决我的问题 2 天,但没有任何成功。
问题是:当我将 BulletSpan 设置为文本然后在 EditText 中显示它时,一切正常,直到我开始输入另一个文本。当文本在屏幕末尾换行时,缩进起作用,但光标指向实际位置,并且在光标之后添加了上一行的一些字符。为了更好地说明这个问题,请参阅附图。
另外值得一提的是,这仅在我输入文本时发生,当我在源中设置文本并且文本太长而不能仅在一行上时,换行工作正常,并且没有添加额外的字符,也光标位置错误。
我也尝试了 LeadingMarginSpan.Standart 并且行为是相同的。
在代码中我设置了开始标记:
private void handleListStart(SpannableStringBuilder text)
int len = text.length();
text.setSpan(new ListItem(), len, len, Spannable.SPAN_MARK_MARK);
然后设置跨度:
private void handleListEnd(SpannableStringBuilder text)
int len = text.length();
Object obj = getLast(text, ListItem.class);
int where = text.getSpanStart(obj);
text.removeSpan(obj);
if (where != len)
text.setSpan(new BulletSpan(listIndent * 15), where, len, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
我正在从 xml 文件中获取数据。
感谢您的帮助
编辑: 我忘了补充一下,我已经在 android 4.1 和 4.4 上尝试过,并且表现相同
【问题讨论】:
你找到解决办法了吗? 我相信这是因为标志Spanned.SPAN_INCLUSIVE_EXCLUSIVE
,它从跨度中排除了新字符,因此删除了前导边距并使光标像那样。如果用 span Spanned.SPAN_INCLUSIVE_INCLUSIVE
替换它应该可以工作。
【参考方案1】:
当您的项目符号样式字符换行时会发生此问题。
当行数增加时,您可以收听,然后您可以清除项目符号并重新设置新的项目符号。
上面的解决方案非常适合我。
【讨论】:
【参考方案2】:@QuinnChen 的回答对我有用。为方便起见,让我用代码详细说明一下。 当文本自动换行到 BulletSpan 和 LeadingMargin span 中的下一行时,会出现此问题。
解决方法是删除之前的跨度,当行增加时再次应用相同的跨度。
点击按钮应用跨度时首先设置int line_counter = editorEditText.getLineCount();
然后在 textwatcher 的正文中写下:
if(line_count > editorEditText.getLineCount())
LeadingMarginSpan[] leadingMarginSpans = editorEditText.getText().getSpans(0, editorEditText.getSelectionStart(),
LeadingMarginSpan.class);
int s , e;
for(LeadingMarginSpan ss: leadingMarginSpans)
s = editorEditText.getText().getSpanStart(ss);
e = editorEditText.getText().getSpanEnd(ss);
if(s<=editorEditText.getSelectionStart() && editorEditText.getSelectionStart()<=e)
editorEditText.getText().removeSpan(ss);
editorEditText.getText().setSpan(new LeadingMarginSpan.Standard(30), s,e,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
line_count = editorEditText.getLineCount();
当文本自动换行到下一行时,将执行此代码。
注意:
这是LeadingMargin的代码,bulletSpan的解决方法也是一样的,你只需要把LeadingMarginSpan改成BulletSpan
【讨论】:
以上是关于使用bulletspan时换行不正确的主要内容,如果未能解决你的问题,请参考以下文章
添加 BulletSpan 时 EditText 不增加宽度
在 jQuery 中使用 $().html 时换行 [重复]