根据文本值改变文本颜色

3
我正在尝试弄清楚如何根据文本的值更改TextView的颜色。 TextView已经从我拥有的另一个活动中发送,这部分工作正常。我想要的是一种根据TextView中的内容更改文本颜色的方法。因此,如果上一个Activity像"11 Mbps"这样发送了一个值作为TextView,那么我希望这个文本的颜色是黄色,“38 Mbps”是绿色,而1 Mbps则是红色。 我正在使用eclipse。

这是我如何将TextView发送到另一个活动的方式。“showmsg”只是用户名发送到另一个页面。

buttonBack.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v){
            final TextView username =(TextView)findViewById(R.id.showmsg);
            String uname = username.getText().toString();

            final TextView wifistrength =(TextView)findViewById(R.id.Speed);
            String data = wifistrength.getText().toString();



                startActivity(new Intent(CheckWiFiActivity.this,DashboardActivity.class).putExtra("wifi",(CharSequence)data).putExtra("usr",(CharSequence)uname));


        }
    });

这是我在另一个活动中接收它的方式。
Intent i = getIntent();
               if (i.getCharSequenceExtra("wifi") != null) {
                final TextView setmsg2 = (TextView)findViewById(R.id.Speed);
                setmsg2.setText(in.getCharSequenceExtra("wifi"));               
               }

这一切都很好,但我不知道如何根据文本值更改TextView的颜色。非常感谢您的任何帮助。
2个回答

4

显然,您希望根据从前一个Activity接收到的String中的数字来设置颜色。因此,您需要将其从String中解析出来,保存到一个int中,然后根据数字设置TextView的颜色。

String s = in.getCharSequenceExtra("wifi");
// the next line parses the number out of the string
int speed = Integer.parseInt(s.replaceAll("[\\D]", ""));
setmsg2.setText(s);
// set the thresholds to your liking
if (speed <= 1) {
    setmsg2.setTextColor(Color.RED);
} else if (speed <= 11) {
    setmsg2.setTextColor(Color.YELLOW);
else {
    setmsg2.setTextColor(Color.GREEN);
}

请注意,这是一段未经测试的代码,可能包含一些错误。
解析的方法来自于这里

+1,我也没有测试过,但看起来应该可以工作。当我看到你的回答时,我几乎不想发帖了,但我喜欢在可能的情况下使用switch并且只需要一行代码来调用函数(这里是setText())。很好的答案。 - codeMagic
这正是我一直在寻找的。我只是复制并粘贴了代码,但我会分解每个部分以学习更多关于编程的知识,并最终扩展它。虽然我只做了几个月,但由于像您这样乐于助人的程序员,我正在取得很大进展。非常感谢您对此的帮助。 - SmulianJulian

1
首先,将您的字符串中所有非数字字符去除并将其转换为整数。然后使用新值上的switch,并相应地设置颜色。
String color = "blue";   // this could be null or any other value but I don't like initializing to null if I don't have to
int speed = i.getCharSequenceExtra("wifi").replaceAll("[^0-9]", "");    // remove all non-digits here
switch (speed)
{
    case (11):
        color = "yellow";
        break;
    case (38):
        color = "green";
        break;
    case(1):
        color = "red";
        break;
}
setmsg2.setTextColor(Color.parseColor(color);

这是一个包含一些有用信息的小网站

颜色文档


这个答案也非常有帮助,但我不能投票,因为我的声望不够。谢谢提供链接。 - SmulianJulian
嗯,这里使用 switch 语句的问题在于它只处理速度恰好为1、11或38的情况。如果速度是其他值,那么文本将保持蓝色。但也许在他的情况下值不能是其他值,谁知道呢。只是说它与我的代码不做相同的事情。 - zbr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接