Android:已禁用复选框,不响应点击事件

时间:2013-03-20 21:40:59

标签: android

我有一个可以动态禁用并绑定到点击侦听器的复选框:

CheckBox chkbox = (CheckBox)findViewById(R.id.chkboxid);

if(condition) {
     chkbox.setEnabled(false);
     chkbox.setOnClickListener(displayPopup);
} else {
     chkbox.setOnClickListener(handleToggle);
}

这样做的目的是,如果禁用该复选框,我想给用户点击复选框更多关于为什么禁用该选项的信息。

我已经意识到禁用的小部件不会发送点击事件来点击监听器。我已经尝试通过执行以下操作将其存在的LinearLayout设置为可点击:

CheckBox chkbox = (CheckBox)findViewById(R.id.checkboxName);
LinearLayout layout = (LinearLayout)findViewById(R.id.layoutName);
if(condition) {
     chkbox.setEnabled(false);
     layout.setClickable(true);
     layout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
     layout.setOnClickListener(displayPopup);
} else {
     chkbox.setOnClickListener(handleToggle);
}

这适用于点击LinearLayout内的任何位置,但禁用复选框除外。它不符合FOCUS_BLOCK_DESCENDANTS设置。我也尝试在复选框上放置一个不可见的可点击对象,但也没有成功。有任何想法吗?

编辑:我们现在停留在API lvl 8中,否则我会尝试降低复选框的alpha值,而不是禁用它以至少模拟被禁用的外观。

2 个答案:

答案 0 :(得分:4)

  

Android:已禁用复选框,不响应点击事件

我认为如果禁用CheckBox或其他类型的窗口小部件,则无法处理任何事件。

但是要做出简单的伎俩。允许CheckBox启用,当未填写所需内容时,始终将checked状态设置为false。它看起来像“我无法勾选CheckBox,有些东西不好”并通过Toast显示一些警告信息。

checkBox.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (somethingIsNotFilledUp) {
            checkBox.setChecked(false);
            Toast.makeText(Main.this, "You didn't fill required fields", Toast.LENGTH_SHORT).show();
        }
        else {
            // do some stuff
        }
    }
});
  

我希望他们看到差异

您可以使用自定义复选框的外观来实现它。

答案 1 :(得分:1)

您无法在已禁用的复选框上接收活动,但我制作了其他技巧模拟已禁用的复选框,您可以在其中接收复选框事件并按下该按钮以启用它,例如

Simulating disabled checkbox receiving events

希望这有助于你