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