Изменить цвет двух частей строки при использовании String.format () - PullRequest
1 голос
/ 10 июля 2019

Я использую следующее, чтобы показать оставшееся время в приложении для игры в слова.

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

Я хочу изменить цвет минуты и второго текста. Как определить цвета в их заполнителях?

Я хочу, чтобы это выглядело так: enter image description here

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

Я сделал это. Что я сделал, так это нашел числа, используя регулярные выражения и использовал Spannable в цикле while для match.find (), чтобы закрасить индекс совпадений. Начальный индекс был индексом, а конечный индекс +2.

0 голосов
/ 10 июля 2019

Вы можете использовать следующий метод, чтобы получить цифры другого цвета

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

0 голосов
/ 10 июля 2019

Если вы используете 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)
...