3

我正在寻找一种使用 onClick 更改 Button 中文本颜色的方法。我希望所选按钮的文本颜色发生变化,而另一个按钮的文本恢复为默认颜色。这种方式(下)似乎非常低效。有没有更好的方法来解决它?另外,如何使用 onClick 恢复为原始颜色?

public void onClick(View v) {
    switch (v.getId()){
        case R.id.button1:
            TextView textView1 = (TextView) findViewById(R.id.button1);
            textView1.setTextColor(Color.RED);
            logLevel = "E";
            //Change the rest to default (white)
        break;
        case R.id.button2:
            TextView textView2 = (TextView) findViewById(R.id.button2);
            textView2.setTextColor(Color.RED);
            logLevel = "W";
            //Change the rest to white
        break;
        case R.id.button3:
            TextView textView3 = (TextView) findViewById(R.id.button3);
            textView3.setTextColor(Color.RED);
            logLevel = "D";
            //Change the rest to white
        break;
        case R.id.button4:
            TextView textView4 = (TextView) findViewById(R.id.button4);
            textView4.setTextColor(Color.RED);
            logLevel = "I";
            //Change the rest to white
        break;
    }

    retrieveLog(logLevel);
}
4

2 回答 2

11

Is there a better way to go about it?

Step #1: Add a TextView[] buttons data member to the activity or fragment

Step #2: In onCreate(), after setContentView(), call findViewById() four times, one per button, and put each button into the buttons array

Step #3: Rewrite onClick() to:

for (TextView button : buttons) {
  if (button==v) {
    button.setTextColor(Color.RED);
  }
  else {
    button.setTextColor(Color.WHITE);
  }
}
于 2013-06-10T19:17:48.657 回答
2

就像 drawables 一样,Android 也允许您为文本颜色设置选择器。这样,您根本不必担心以编程方式更改颜色,因为框架会处理这些问题。

例如,在res/color/text_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:color="#000000" /> <!-- pressed -->
     <item android:state_focused="true"
           android:color="#000000" /> <!-- focused -->
     <item android:color="#FFFFFF" /> <!-- default -->
</selector>

然后像任何其他颜色一样引用它:

<Button ... 
    android:textColor="@color/text_color_selector" />

来源:Android 选择器和文本颜色


编辑:我可能误解了最初的问题,因为您似乎希望在单击后保留更改的文本颜色。您可能仍然可以使用上述内容,但将您的更改Button为支持检查状态的内容。这意味着,在检查时,您将具有一种颜色,并且在未选中其倒置版本时。显然,您可以将结果设置为看起来就像一个普通按钮(没有实际复选标记)。

于 2013-06-10T19:21:26.283 回答