【问题标题】:Android: Disabled checkbox not responding to click eventsAndroid:禁用复选框不响应点击事件
【发布时间】: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


【解决方案1】:

您无法在禁用的复选框上接收事件,但我做了其他技巧模拟禁用的复选框,您可以在其中接收复选框事件并启用它,例如长按它

Simulating disabled checkbox receiving events

希望对你有帮助

【讨论】:

    【解决方案2】:

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

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

    但是如何做一个简单的把戏。让CheckBox 启用,当需要的东西没有填满时,总是将检查状态设置为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 您可以使用自定义复选框背景来实现它:)
    • 这是我的团队最终决定的。将使用一些信息here 作为参考。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多