[英]How to detect touch events on disabled checkbox in android
我有几个复选框的layout
。 当选中一个复选框时,其他复选框设置为CHECKED=true
和ENABLED=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.