我可以为附加到TextView的每个文本行选择一种颜色吗?

Rom*_*dgz 5 android colors textview

我有一个TextView用作蓝牙连接控制台.当我发送命令时,我希望它以彩色(例如青色)书写,并且答案以不同的颜色(例如红色)收到.

有可能这样做,如果是这样,怎么样?

我读过可能会使用HTML,但我不确定这是最好的方法,甚至不知道怎么做.

ben*_*ous 16

这是一个基于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);
}
Run Code Online (Sandbox Code Playgroud)

只需更换任何电话

textView.append("Text")
Run Code Online (Sandbox Code Playgroud)

appendColoredText(textView, "Text", Color.RED);
Run Code Online (Sandbox Code Playgroud)


C0d*_*ack 7

你真的需要它作为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);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以这表明它可以完成,但你明显会注意到你必须自己设置换行符并在每个命令/答案开始和结束时进行锻炼,以便你可以为它应用正确的颜色.这并不难,但对我来说,感觉笨重.