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

时间:2011-11-12 15:55:20

标签: android colors textview

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

是否可以这样做,如果可以,怎么做?

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

4 个答案:

答案 0 :(得分: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);
}

只需替换对

的任何调用
textView.append("Text")

appendColoredText(textView, "Text", Color.RED);

答案 1 :(得分: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);
    }
}

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

答案 2 :(得分:0)

如果你使用它,那就更容易了:

textView.append(Html.fromHtml("<font color='#FFFFFF'</font>"));

答案 3 :(得分:-3)

检查每个州 textView.setTextColor(Color.RED);