2013-01-04 26 views
2

禁用复选框的触摸事件我有一个layout与几个复选框。当一个复选框被检查时,其他复选框被设置为CHECKED=trueENABLED=false。现在我希望用户能够点击任何禁用的复选框,如果他这样做,一个被设置为启用和检查,所有其他都被禁用。如何检测在android

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

+0

怎么样听众ChkBx.setOnCheckedChangeListener ..是否被调用? – Gridtestmail

+1

enabled = false表示该复选框根本无法点击。听起来对我而言,你想要做的只是将检查改为false。你有没有考虑过使用单选按钮?如果您只需要选择一个项目,可能是更好的解决方案。 – TofferJ

+0

用户为什么要点击禁用的复选框?我相信用户不会理解这个“功能”:) – dit

回答

0

通常,这种情况的行为是Android中的一个问题。你可能可以做的一件事是把CheckBoxViewGroup(例如FrameLayout等许多布局之一)的东西中删除,并使用setOnClickListener就可以了。

+1

这很好用,但是,Click事件不仅仅是从布局生成的。这意味着,如果我点击复选框,它仍然不会传播。是否有任何设置可以使整个布局可点击? –

0

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

我所做的是一个白色文本颜色的复选框,但以灰色文本颜色开头,并且选中一个布尔终止变量,您将在每个方法上检查之前的布尔终止变量。除非更改布尔终止变量,否则复选框从不被检查。你可以多次按复选框,只要你想,没有任何反应。它只显示为禁用,但当您长按一下按钮时,您将取消阻塞布尔终止变量,并将灰色文本颜色复选框更改为白色,就像普通复选框一样。当你想,你可以改变塞变量与 “再次禁用它”

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

希望这有助于你