繁体   English   中英

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

[英]How to detect touch events on disabled checkbox in android

我有几个复选框的layout 当选中一个复选框时,其他复选框设置为CHECKED=trueENABLED=false 现在,我希望用户能够点击任何一个禁用的复选框,如果他这样做,则将其设置为启用并选中,而将所有其他复选框都禁用。

onTouchListener还有onClickListener似乎并不时复选框被设置为被称为ENABLED=false 有人可以帮忙吗?

通常,这种情况下的行为在Android中是一个问号。 你可以做的一件事就是把CheckBox从东西的后裔ViewGroup (其中的许多布局等FrameLayout ,例如),并使用setOnClickListener就可以了。

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

我所做的是一个复选框,该复选框具有白色文本颜色,但以灰色文本颜色开头onCheckedChanged选中,带有一个布尔值stopper变量,您需要在每个onCheckedChanged方法上进行检查。 除非更改布尔停止符变量,否则永远不会选中复选框。 您可以根据需要多次按下复选框,但没有任何反应。 它似乎只是被禁用,但是当您长按一下时,您将取消阻止布尔变量,并将灰色文本颜色复选框更改为白色,就像普通复选框一样。 您可以根据需要更改stopper变量,然后“再次禁用它”

在color.xml中:

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

在main.xml中:

<CheckBox
      android:id="@+id/checkbox1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textColor="@color/white"
      android:text="text" />

在main.java代码中,onCreate方法:

//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;
   }
});

希望这对您有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM