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

时间:2016-06-02 14:46:36

标签: java 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);
            }
        }
}  

1 个答案:

答案 0 :(得分:1)

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

至于我,这不是好方法,而是快速解决方案:

Type.GetMethod(string name, Type[] types)

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