Можно ли выбрать цвет для каждой текстовой строки, которую я добавляю в TextView? - PullRequest
5 голосов
/ 12 ноября 2011

У меня есть TextView для использования в качестве консоли подключения Bluetooth. Когда я отправляю команду, я хочу, чтобы она была написана цветом (например, голубой), а ответы были получены другим цветом (например, красным).

Возможно ли это сделать, и если да, то как?

Я читал, что это возможно сделать с помощью HTML, но я не совсем уверен, что это лучший подход или даже как это сделать.

Ответы [ 4 ]

16 голосов
/ 22 февраля 2012

Вот небольшая вспомогательная функция, основанная на ответе C0deAttack, которая упрощает вещи

public static void appendColoredText(TextView tv, String text, int color) {
    int start = tv.getText().length();
    tv.append(text);
    int end = tv.getText().length();

    Spannable spannableText = (Spannable) tv.getText();
    spannableText.setSpan(new ForegroundColorSpan(color), start, end, 0);
}

Просто замените все звонки на

textView.append("Text")

с

appendColoredText(textView, "Text", Color.RED);
7 голосов
/ 12 ноября 2011

Вам действительно нужно, чтобы это был TextView, или вы вместо этого можете использовать ListView и добавить новую строку в список для каждой команды / ответа?

Если вы действительно хотитеиспользуя TextView, вы можете сделать что-то вроде этого (это рабочий пример, который вы можете просто скопировать и вставить в свое приложение, чтобы попробовать):

package com.c0deattack;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.style.ForegroundColorSpan;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MultipleColoursInOneTextViewActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tv = new TextView(this);

        String command = "This is a command";
        String response = "\nThis is a response";

        tv.append(command + response);
        Spannable spannableText = (Spannable) tv.getText();
        spannableText.setSpan(new ForegroundColorSpan(Color.GREEN), 0, command.length(), 0);
        spannableText.setSpan(new ForegroundColorSpan(Color.RED), command.length(), command.length() + response.length(), 0);

        LinearLayout layout = new LinearLayout(this);
        layout.addView(tv);
        setContentView(layout);
    }
}

Так что это показывает, что это можно сделать, но выОчевидно, вы заметите, что вам придется самим устанавливать разрывы строк и тренировки, где каждая команда / ответ начинается и заканчивается, чтобы вы могли применить к ней правильный цвет.Это не так сложно, но для меня это кажется неуклюжим.

0 голосов
/ 24 января 2017

Проще, если вы используете:

textView.append(Html.fromHtml("<font color='#FFFFFF'</font>"));
0 голосов
/ 12 ноября 2011

проверка для каждого состояния textView.setTextColor (Color.RED);

...