我有一个TextView可用作蓝牙连接控制台。当我发送命令时,我希望它以彩色(例如青色)书写,并且答案以不同的颜色(例如红色)收到。
是否可以这样做,如果可以,怎么做?
我读过可能会使用HTML,但我不确定这是最好的方法,甚至不知道怎么做。
答案 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);