使用String.format()时更改字符串两部分的颜色

时间:2019-07-10 10:52:02

标签: android string.format

我正在使用以下内容显示文字游戏应用中的剩余时间。

remainingTime.setText(String.format(Locale.getDefault(),"REMAINING TIME: %d MNS %d SECONDS ",(millisUntilFinished / 1000) / 60 ,(millisUntilFinished / 1000) % 60));

我想更改分钟和第二个文本的颜色。如何在其占位符中定义颜色?

我希望它看起来像这样:  enter image description here

3 个答案:

答案 0 :(得分:0)

如果您使用Kotlin,则可以使用扩展功能来实现。

    fun TextView.setColouredSpan(word: String, color: Int) {
        val spannableString = SpannableString(text)
        val start = text.indexOf(word)
        val end = text.indexOf(word) + word.length
        try {
            spannableString.setSpan(ForegroundColorSpan(color), start, end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            text = spannableString
        } catch (e: IndexOutOfBoundsException) {
         println("'$word' was not not found in TextView text")
    }
}

将文本设置为TextView后使用它

private val blueberry by lazy { getColor(R.color.blueberry) }

textViewTip.setColouredSpan("Warning", blueberry)

答案 1 :(得分:0)

我做到了。我所做的就是使用正则表达式查找数字并使用 在matchs.find()的while循环中可用,以为匹配项的颜色着色。开头是索引,结尾是索引+ 2。

答案 2 :(得分:0)

您可以使用以下方法获取其他颜色的数字

public SpannableString getColoredString(String string, int color){

        SpannableString spannableString = new SpannableString(string);

        for(int i = 0; i < string.length(); i++){
            if(Character.isDigit(string.charAt(i))){
                spannableString.setSpan(new ForegroundColorSpan(color), i, i+1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
            }
        }
        return spannableString;
    }

在您的“活动”代码中,使用上述功能并将返回值设置为textview

String text = String.format(Locale.getDefault(),"REMAINING TIME: %d MNS %d SECONDS ",(millisUntilFinished / 1000) / 60 ,(millisUntilFinished / 1000) % 60);

SpannableString string = getColoredString(text, Color.YELLOW);

remainingTime.setText(string);

enter image description here