Android:尝试使用Spannable(部分工作)更改字符串的颜色



我有一个名为note的字符串。我用这段代码来更改两个* *字符之间特定单词的颜色。它部分工作正常。我面临的问题是在我插入这个符号"➥"后,没有将 * * 之间的确切单词着色为黄色(短语示例:这是一本*good*书 - 它将单词开头之前的最后一个字母更改为黄色 * - a good 而不是 good )。我需要一些帮助。我是新手。

    if(note != null){
        int firstIndex = note.indexOf("*");
        if (firstIndex >= 0) {
            note = note.replaceFirst("[*]{1}", "");
            int secIndex = note.indexOf("*");
            if (secIndex >= 0) {
                note = note.replaceFirst("[*]{1}", "");
                String newString = "➥ "+note;
                Spannable spannable = new SpannableString(newString);
                spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD_ITALIC), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                txtnote.setText(spannable);
            }
        }
}  

原因是 2 个符号上的字符串长度已更改,因此索引也已更改。

对我来说,这不是好方法,但作为快速解决方案:

    int removedSymbolCount = 0;
    if (firstIndex >= 0) {
        note = note.replaceFirst("[*]{1}", "");
        removedSymbolCount++;
        int secIndex = note.indexOf("*");
        if (secIndex >= 0) {
            note = note.replaceFirst("[*]{1}", "");
            removedSymbolCount++;
            String newString = "➥ "+note;
            Spannable spannable = new SpannableString(newString);
            spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), firstIndex + removedSymbolCount, secIndex + removedSymbolCount, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD_ITALIC), firstIndex + removedSymbolCount, secIndex + removedSymbolCount, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            txtnote.setText(spannable);
        }
    }

我认为为了更好的解决方案,可以使用匹配器和正则表达式

相关内容

  • 没有找到相关文章

最新更新