当前位置:  开发笔记 > 编程语言 > 正文

通过迭代失败来设置多个跨度样式的文本

如何解决《通过迭代失败来设置多个跨度样式的文本》经验,为你挑选了1个好方法。

我通过多个span样式设置了几个单词,当我将带有样式的数组传递给方法时,结果中只有最后一个单词具有该样式.它省略了其他的话.为什么?在我的代码和执行下面.先感谢您.

//execution in code
charSequence = SpannableUtils.format(
        charSequence,
        new ParcelableSpan[]{new StyleSpan(Typeface.BOLD)},//or more
        new String[]{"Test1", "Test2"}
);

//method
public static CharSequence format(CharSequence charSequence, ParcelableSpan[] spans, String[] words) {
    SpannableStringBuilder ssb = new SpannableStringBuilder(charSequence);

    for (String word : words) {
        Pattern pattern = Pattern.compile(Pattern.quote(word));
        Matcher matcher = pattern.matcher(charSequence);

        for (ParcelableSpan span : spans) {
            while (matcher.find()) {
                ssb.setSpan(span, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
    }

    return ssb;
}

但是,如果我用'instance of'检查span的类型,然后我创建新的constructior它可以工作.为什么?



1> Floern..:

您不能多次应用相同的span对象.所有先前设置的跨度都被丢弃,因此只有最后一个单词具有跨度.

如果要重复使用它,则必须CharacterStyle.wrap()在应用之前将其复制:

while (matcher.find()) {
    ssb.setSpan(CharacterStyle.wrap(span), matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有