如何在android中检测禁用复选框上的触摸事件

如何在android中检测禁用复选框上的触摸事件,android,checkbox,onclicklistener,ontouchlistener,Android,Checkbox,Onclicklistener,Ontouchlistener,我有一个带有两个复选框的布局。选中一个复选框时,其他复选框设置为checked=true和ENABLED=false。现在,我希望用户能够点击任何禁用的复选框,如果他这样做,一个被设置为启用和选中,所有其他被禁用 当复选框设置为ENABLED=false时,似乎不会调用onTouchListener以及onClickListener。有人能帮忙吗?在Android中,这种情况下的行为通常是个问号。您可以做的一件事是将复选框从视图组派生而来(例如,FrameLayout等许多布局之一),并在其上使

我有一个带有两个复选框的
布局
。选中一个复选框时,其他复选框设置为
checked=true
ENABLED=false
。现在,我希望用户能够点击任何禁用的复选框,如果他这样做,一个被设置为启用和选中,所有其他被禁用


当复选框设置为
ENABLED=false
时,似乎不会调用
onTouchListener
以及
onClickListener
。有人能帮忙吗?

在Android中,这种情况下的行为通常是个问号。您可以做的一件事是将
复选框
视图组
派生而来(例如,
FrameLayout
等许多布局之一),并在其上使用
setOnClickListener

您无法接收禁用复选框的事件。如果将禁用复选框放在类似
FrameLayout
的版面上,则单击版面时可以接收事件,但不在禁用复选框中。如果要捕获禁用复选框上的事件,最好的方法是简单地模拟禁用复选框,然后捕获长时间单击事件以再次激活,例如

我所做的是一个带有白色文本颜色的复选框,但以灰色文本颜色开始,并且未选中,在每个
onCheckedChanged
方法上都会检查一个布尔停止变量。除非更改boolean stopper变量,否则永远不会选中复选框。您可以根据需要多次按下复选框,但不会发生任何事情。它只显示为禁用状态,但当您长按鼠标时,将取消阻止boolean stopper变量,并像普通复选框一样将灰色文本颜色复选框更改为白色。您可以在需要时更改stopper变量并“再次禁用”

在color.xml中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="white">#FFFFFF</color>
   <color name="grey">#808080</color>
</resources>

希望这对您有所帮助

侦听器ChkBx.setOnCheckedChangeListener.怎么样。。是否调用?enabled=false表示该复选框根本不可单击。听起来你想做的只是将checked改为false。你考虑过用单选按钮吗?如果您一次只希望选择一个项目,则可能是更好的解决方案。为什么用户要单击“禁用”复选框?我相信用户不会理解这个“功能”:@TofferJ我也这么做了。@dieter对于用户,我们可以显示toast或alert对话框。这非常有效,但是,单击事件不仅仅是从布局生成的。这意味着,如果我单击复选框,它仍然不会传播。是否有任何设置使整个布局可点击?
<CheckBox
      android:id="@+id/checkbox1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textColor="@color/white"
      android:text="text" />
//define a boolean stopper variable to check on event
boolean chkActivated = false; 

checkbox = (CheckBox) findViewById(R.id.checkbox1);
checkbox.setTextColor(getResources().getColorStateList(R.color.grey));
checkbox.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if(chkActivated){
             if (isChecked) {
                 //Do everthing you want when checked
             }else{
                //Do everthing you want when unchecked
             }
         }else{
             checkbox.setChecked(false);
             Toast.makeText(Activity.this, "It is disabled. to activate press long click"), Toast.LENGTH_SHORT).show();
         }
      }
});

checkbox.setOnLongClickListener(new OnLongClickListener() { 
   @Override
   public boolean onLongClick(View v) {
       chkActivated = true;
       checkbox.setTextColor(getResources().getColorStateList(R.color.white));
       checkbox.setChecked(true);
       return true;
   }
});