我有一个可以动态禁用并绑定到点击侦听器的复选框:
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 而不是禁用它以至少模拟被禁用的外观。