Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何防止复选框被选中?_Android - Fatal编程技术网

Android 如何防止复选框被选中?

Android 如何防止复选框被选中?,android,Android,我希望在单击复选框时能够阻止选中复选框(或将其设置为未选中) 我怎样才能做到这一点 我不想简单地禁用复选框。我希望用户认为它是可检查的,但当用户尝试检查它时。。。然后我将(可能)阻止复选框被选中,并显示一条消息。尝试以下操作 CheckBox repeatChkBx = ( CheckBox ) findViewById( R.id.repeat_checkbox ); repeatChkBx.setOnCheckedChangeListener(new OnCheckedCha

我希望在单击复选框时能够阻止选中复选框(或将其设置为未选中)

我怎样才能做到这一点

我不想简单地禁用复选框。我希望用户认为它是可检查的,但当用户尝试检查它时。。。然后我将(可能)阻止复选框被选中,并显示一条消息。

尝试以下操作

    CheckBox repeatChkBx =
    ( CheckBox ) findViewById( R.id.repeat_checkbox );
repeatChkBx.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if ( isChecked )
        {
           repeatChkBx.setChecked(false); // perform logic of opening message
        }

    }
});

您可以这样做:

cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){

    @Override
    public void onCheckedChanged(CompoundButton buttonView,
    boolean isChecked) {
    if(isChecked){
        cb.setChecked(false);
        // Code to display your message.
        }
    }
});

只需在布局xml中添加
android:clickable=“false”
属性

因此,对我来说:

    <CheckBox
        android:id="@+id/server_is_online"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checked="true"
        android:clickable="false"
        android:text="@string/server_is_online"
        android:textSize="23sp" />

而且效果很好


不,这可能不是你应该使用复选框的方式,但我在原型制作阶段将其作为一个肮脏的黑客使用,而不是使用一个漂亮的图标,绿色勾号表示一切好,邪恶的红十字表示世界末日:)

只需将其设置为永不被点击即可

cb.setClickable(false);

这个代码对我来说是完美的


在Android CompoundButton类中,perfumclick()切换按钮的选中状态

@Override
    public boolean performClick() {
        toggle();

        final boolean handled = super.performClick();
        if (!handled) {
            // View only makes a sound effect if the onClickListener was
            // called, so we'll need to make one here instead.
            playSoundEffect(SoundEffectConstants.CLICK);
        }

        return handled;
    }

如果您想手动控制行为,可以创建一个类来扩展CheckBox并重写performClick()方法。因为clickable=false对我不起作用。

您可以尝试View.TouchListener作为复选框视图的侦听器,如下所示:

 inner class TouchListener : View.OnTouchListener {
        override fun onTouch(view: View, event: MotionEvent): Boolean {
            when (view.id) {
                <Your View id> -> {
                    if (event.action == ACTION_DOWN) {
                        //do your stuff here
                    }
                    return true /*To consume click event so the checkbox doesn't get checked, you can set it checked later once you're done using setChecked(true)*/
                }
            }
            return false
        }
    }
内部类TouchListener:View.OnTouchListener{
覆盖趣味onTouch(视图:视图,事件:运动事件):布尔值{
何时(view.id){
-> {
如果(event.action==操作_DOWN){
//在这里做你的事
}
return true/*要使用click事件,以便复选框不被选中,可以在使用setChecked(true)完成后将其设置为选中*/
}
}
返回错误
}
}
*此代码段位于Kotlin中,请尝试以下操作

<CheckBox
    
    **android:background="@android:color/transparent"

    **android:clickable="false"

    android:id="@+id/login_access_tick"
    
    android:layout_width="wrap_content"
    
    android:layout_height="wrap_content"/>

android:background
用于删除点击涟漪效应


android:clickable=“false”
使其不可点击

这是设计UI的正确方法吗??你为什么需要这个?我也需要同样的东西。这是为内置的帮助系统。在帮助模式下,每个活动元素都会显示帮助消息,而不是执行它的操作。如果您希望每次单击时都显示消息,您也可以只执行
cb.setChecked(!isChecked)
。对于辅助功能(如对讲),这不会失败吗?我得检查一下@盖茨布:对我来说,这听起来像是一个无限循环。。。或堆栈溢出。@不,它不会循环或溢出。OP不要求网络可用性。这不是问题的答案。@zgue,我已经改进了我的答案,你为什么不简单地使用
按钮view.setChecked(!isChecked)?如果将
复选框
放在具有单击侦听器的较大版面中,则直接单击该复选框不会导致单击侦听器启动,除非为该复选框设置
可单击=false
。调用
performClick()
时,这不起作用
<CheckBox
    
    **android:background="@android:color/transparent"

    **android:clickable="false"

    android:id="@+id/login_access_tick"
    
    android:layout_width="wrap_content"
    
    android:layout_height="wrap_content"/>