Android Span or Non-Breaking Space Causing line break and text duplication (4.0 ICS)

标签 android

我正在使用多个大量使用 span 的 TextView 。

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

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

我在使用它几个小时后注意到的一些细节: 导致错误的条件似乎与呈现文本的整体宽度有关。例如,对于上图的文本,如果我关闭数字上的粗体范围,图片中的文本将正确显示,但是如果我保留粗体范围,并关闭数字上的颜色变化范围(这不会改变宽度),问题仍然存在。

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

非常感谢任何帮助!

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

最佳答案

据我了解您的问题,只需使用另一个 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));
  }
}

关于Android Span or Non-Breaking Space Causing line break and text duplication (4.0 ICS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15491462/

相关文章:

android - Jelly Bean 通知中的两种状态操作按钮

Android smsManager 处理重音符号

android - 在某些设备上完成 Android 的应用内灵活更新过程后,应用不会自动重启

android - 继承可绘制选择器

安卓 AdMob : addView doesn't show ad until return to activity

android - 如何在Android中启用接近传感器

android - ndk-构建 "member ... in archive is not an object"

android - 为什么我会得到 "Not a valid keystore file"错误

android - 使用 Urban Airship 的推送通知在第一次启动时将 apID 返回为 null

android - 从string.xml获取app_name以获取Gradle中的当前产品 flavor