Android跨度或非中断空间导致换行符和文本复制(4.0 ICS)

时间:2013-03-19 04:23:48

标签: android

我正在使用多个文本视图,大量使用跨度。

问题:有时在我的应用中(特别是在冰淇淋三明治上),我会看到一个不在文本字符串中的换行符,以及文本复制。有关示例,请参见下图。注意第三个句子是如何开始的,然后是换行符,然后文本重复,句子结束。

enter image description here

代码:

tv = (TextView) inflater.inflate(R.layout.fragment_reader_list_item, parent, false);
SpannableStringBuilder ssb = ssbList.get(position);
tv.setText(ssb, BufferType.SPANNABLE);

当我调试代码时,变量'ssb'正确地只包含文本......“3不是对你负责的人进行霸气,而是成为羊群的例子.4当主人”...... < / p>

我已经注意到了几个小时的一些具体细节: 导致该错误的条件似乎与渲染文本的总宽度有关。例如,如上图所示,如果我关闭数字上的粗体跨度,图示文本将正确显示,但是如果我离开粗体跨度,并关闭数字的颜色更改范围(这不会改变总的来说,问题仍然存在。

值得注意的是,在每个数字后我都使用了不间断的空间。如果我用不间断的空间交换非破坏空间,我不再看到问题,但这或多或少可能是因为渲染的字符串发生了变化。这个问题可能与跨度没有任何关系,但似乎只有任何旧文本传递的bug太大了。

非常感谢任何帮助!

修改 这个bug似乎与Bold span的使用密切相关。取消数字可以解决问题。这就是我目前使用的解决方法。如果有更好的选择,那就太好了。

1 个答案:

答案 0 :(得分:0)

据我了解你的问题,只需使用另一个SpannableStrinBuilder sb并在sb中设置文本,如下所述。我正在删除标签和新行。

SpannableStringBuilder sb = new SpannableStringBuilder();
for(int loop=0 ; loop<(str.length() -1); loop++)
{
  if(!(str.subSequence(loop, loop+1).equals("\t") || 
       str.subSequence(loop, loop+1).equals("\n"))
    )
  {
  sb.append(str.charAt(loop));
  }
}