0

在用户将其状态更改为Checked后,我尝试更改CheckBox背景。下面的代码不能很好地工作。如果我单击未选中的复选框,它将状态和颜色更改为蓝色,当我再次单击它并取消选中时,颜色保持蓝色而不是变为红色。我确实引入了invalidate()的调用,但没有成功。我确认该方法收到点击并正确查看检查状态,但如果我所做的声明似乎只工作一次。

XML

<CheckBox
    android:id="@+id/chkLargeIcons"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="20"
    android:onClick="handleCheckBoxClick" />

代码

public void handleCheckBoxClick(View view) {
    CheckBox tmpChkBox = (CheckBox) findViewById(view.getId());
    if(tmpChkBox.isChecked())
    {
        tmpChkBox.setBackgroundColor(color.blue);
    }
    else
    {
        tmpChkBox.setBackgroundColor(color.red);
    }

    System.out.println(view.getId() + " " + tmpChkBox.isChecked());

    switch (view.getId()) {
    case R.id.chkLargeIcons:
        ...     
    break;
        ...
    }
    ...
}

我应该对我的代码进行哪些更改以使其按我的意愿工作?

提前感谢您的任何帮助和建议。

4

2 回答 2

2

要在检查时更改它,您需要附加一个 OnCheckChangedListener。然后将上面的代码放在里面。

CheckBox tmpChkBox = (CheckBox) findViewById(view.getId());
tmpChkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            buttonView.setBackgroundColor(Color.BLUE);
        } else { 
            buttonView.setBackgroundColor(Color.RED);
        }
    }
 });
于 2013-02-11T19:18:07.143 回答
0

首先对一个不清楚的方面进行一些解释

问题是如果有人假设我使用 android Color类,我的代码中提到的示例颜色可能会产生误导。当我使用存储在color.xml中的红色蓝色版本时,这就是为什么我在代码中将它们声明为color.red而不是Color.RED

因此,我的代码与其他答案中的侦听器代码相同,如果您假设颜色取自 android 类,则两者都是有效的。

我的问题的根源是一些奇怪的故障,或者我不知道导致以下代码工作错误的android行为。

public void handleCheckBoxClick(View view) {
    CheckBox tmpChkBox = (CheckBox) findViewById(view.getId());
    if(tmpChkBox.isChecked())
    {
        tmpChkBox.setBackgroundColor(color.blue);
    }
    else
    {
        tmpChkBox.setBackgroundColor(color.red);
    }
}

正是这样的线条

    tmpChkBox.setBackgroundColor([ColorFromResources]);

虽然代码的执行只让我发生了一次颜色变化,但它就这样保持不变,完全没有响应。这一变化在很大程度上具有误导性,让我在这个问题上停留了很长时间,甚至让我把它留待以后修复。经过更多研究后,我发现以下代码更改可以解决我的问题:

   tmpChkBox.setBackgroundColor(getResources().getColor([ColorFromResources]));

现在一切都像一个魅力。但我仍然很困惑为什么没有getResources().getColor(...)资源调用颜色。希望这个答案能帮助像我这样奇怪的人。

于 2013-03-14T12:16:21.287 回答