【发布时间】:2013-03-10 05:47:13
【问题描述】:
我有一个可以动态禁用并绑定到点击监听器的复选框:
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 而不是禁用它以至少模拟被禁用的外观。
【问题讨论】:
-
我只是做了一个类似的事情,简单地为复选框使用深灰色按钮色调和文本颜色,并使 onClickListener 始终执行 'setChecked(false);' 它看起来像被禁用,虽然它会在一毫秒内切换但然后再次关闭,您可以进行处理。就我的目的而言,它已经足够好了。问候,本
标签: android