Android:Disabled复选框不响应单击事件
我有一个复选框,可以动态禁用并绑定到单击侦听器:Android:Disabled复选框不响应单击事件,android,Android,我有一个复选框,可以动态禁用并绑定到单击侦听器: CheckBox chkbox = (CheckBox)findViewById(R.id.chkboxid); if(condition) { chkbox.setEnabled(false); chkbox.setOnClickListener(displayPopup); } else { chkbox.setOnClickListener(handleToggle); } 这样做的目的是,如果该复选框被禁
CheckBox chkbox = (CheckBox)findViewById(R.id.chkboxid);
if(condition) {
chkbox.setEnabled(false);
chkbox.setOnClickListener(displayPopup);
} else {
chkbox.setOnClickListener(handleToggle);
}
这样做的目的是,如果该复选框被禁用,我想为单击该复选框的用户提供有关为什么禁用该选项的更多信息
我后来意识到,禁用的小部件不会向单击侦听器发送单击事件。此后,我尝试通过执行以下操作将线性布局设置为可单击:
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);
}
这适用于单击线性布局
中除禁用复选框外的任何位置。它没有遵循焦点\块\子体
设置。我也尝试过在复选框上放置一个不可见的可点击对象,但也没有成功。有什么想法吗
编辑:我们现在被困在API lvl 8中,否则我会尝试降低复选框的alpha值,而不是禁用它,以至少模拟被禁用的外观
Android:Disabled复选框不响应单击事件
我认为如果禁用了复选框
或其他类型的小部件,则无法处理任何事件
但是我们来做一个简单的小把戏。启用复选框
,当所需内容未填写时,始终将选中状态设置为false。它将显示为“我不能勾选复选框,有些东西不好”,并通过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
}
}
});
我想让他们看到区别
您可以通过使用自定义复选框的外观来实现它。您不能在禁用的复选框上接收事件,但我做了另一个技巧,模拟禁用的复选框,您可以在其中接收复选框事件并启用它,例如长按它
希望这对您有所帮助我考虑过这一点。问题是,我希望用户能够直观地看到它被启用或禁用,因为条件可能会发生变化,而用户不会主动做任何事情。这听起来可能令人困惑,但根据另一个用户(如管理员)的设置,该条件是真是假,如果管理员用户决定让它可用,我希望他们看到区别。@Megan您可以使用自定义复选框背景实现它,例如:)这是我的团队最终决定的。我将使用一些信息作为参考。我只是做了一件类似的事情,简单地使用深灰色按钮色调和文本颜色作为复选框,并使onClickListener始终执行设置选中(false);它看起来像是被禁用了,虽然有一毫秒它会切换,但随后会再次关闭,您可以进行处理。就我而言,这已经足够好了。你好,本