8

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

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

在此处输入图像描述

代码:

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当酋长”......

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

还值得注意的是,在每个数字之后,我都使用了一个不间断的空格。如果我用中断空间交换非中断空间,我不再看到问题,但这或多或少可能是因为呈现的字符串发生了变化。这个问题可能与跨度无关,但它似乎是一个太大的错误,无法通过任何旧文本传递。

任何帮助是极大的赞赏!

编辑: 这个错误似乎与粗体跨度的使用密切相关。将其从数字中删除可以解决问题。这就是我目前采取的解决方法。如果有更好的选择就好了。

4

1 回答 1

0

据我了解您的问题,只需使用另一个 SpannableSrinBuilder 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));
  }
}
于 2013-04-10T11:06:24.273 回答