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 的颜色。任何帮助将非常感激。

4

2 回答 2

4

您显然想根据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);
}

请注意,这是一个未经测试的代码,它可能包含一些错误。

解析它的方法来自这里

于 2013-05-08T00:25:51.827 回答
1

首先,从您的文件中取出所有非数字字符String并将其转换为integer. 然后switch在新值上使用 a 并相应地设置颜色

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);

这是一个带有一些方便信息的小网站

颜色文档

于 2013-05-08T00:35:56.147 回答