禁用复选框的触摸事件我有一个layout
与几个复选框。当一个复选框被检查时,其他复选框被设置为CHECKED=true
和ENABLED=false
。现在我希望用户能够点击任何禁用的复选框,如果他这样做,一个被设置为启用和检查,所有其他都被禁用。如何检测在android
当复选框设置为ENABLED=false
时,onTouchListener
以及onClickListener
似乎不会被调用。谁能帮忙?
禁用复选框的触摸事件我有一个layout
与几个复选框。当一个复选框被检查时,其他复选框被设置为CHECKED=true
和ENABLED=false
。现在我希望用户能够点击任何禁用的复选框,如果他这样做,一个被设置为启用和检查,所有其他都被禁用。如何检测在android
当复选框设置为ENABLED=false
时,onTouchListener
以及onClickListener
似乎不会被调用。谁能帮忙?
通常,这种情况的行为是Android中的一个问题。你可能可以做的一件事是把CheckBox
从ViewGroup
(例如FrameLayout
等许多布局之一)的东西中删除,并使用setOnClickListener
就可以了。
这很好用,但是,Click事件不仅仅是从布局生成的。这意味着,如果我点击复选框,它仍然不会传播。是否有任何设置可以使整个布局可点击? –
您无法接收禁用的复选框上的事件。如果您将禁用复选框放置在类似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;
}
});
希望这有助于你
怎么样听众ChkBx.setOnCheckedChangeListener ..是否被调用? – Gridtestmail
enabled = false表示该复选框根本无法点击。听起来对我而言,你想要做的只是将检查改为false。你有没有考虑过使用单选按钮?如果您只需要选择一个项目,可能是更好的解决方案。 – TofferJ
用户为什么要点击禁用的复选框?我相信用户不会理解这个“功能”:) – dit