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

标签 android checkbox onclicklistener ontouchlistener

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

当复选框设置为 ENABLED=false 时,onTouchListeneronClickListener 似乎不会被调用。谁能帮忙?

最佳答案

您无法在禁用的复选框上接收事件。如果您将禁用的复选框放在像 FrameLayout 这样的布局上,您可以在单击布局时收到事件,但不会在禁用的复选框中收到事件。例如,如果您想在禁用的复选框上捕获事件,最好的方法是简单地模拟禁用的复选框,然后捕获长按事件以再次激活。

我所做的是一个带有白色文本颜色但以灰色文本颜色开始且未选中的复选框,带有一个 bool 停止变量,您之前在每个 onCheckedChanged 方法中检查它。除非您更改 bool 停止变量,否则永远不会选中复选框。您可以根据需要多次按下复选框,但没有任何反应。它似乎只是被禁用,但是当您长按时,您会解锁 bool 停止变量并将灰色文本颜色复选框更改为白色,就像普通复选框一样。您可以在需要时更改 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;
   }
});

希望对你有帮助

关于android - 如何检测android中禁用复选框的触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158317/

相关文章:

javascript - 我想在 jquery 中创建一个自定义函数,使用很少的控件作为参数。我怎样才能实现这个目标?

java - 如何将 onclick 监听器设置为 Canvas ?

android - Android Youtube API 是否使用官方 Youtube 应用程序播放视频?

javascript - 仅当使用 jQuery 单击任何复选框时才应启用提交按钮

java - ReSTLet 是否支持批处理?

javascript - 让jqGrid的cb列更宽

android - 振动点击

java - boolean onClickEventListener 返回的目的

java - 共享首选项中的 Android 颜色

php - 读取所有带有用户ID的mysql数据库项