我有一个layout
带有几个复选框。当一个复选框被选中时,其他复选框被设置为CHECKED=true
and ENABLED=false
。现在我希望用户能够点击任何禁用的复选框,如果他这样做,一个设置为启用并选中,而其他所有复选框都被禁用。
当复选框设置为 时,似乎没有调用onTouchListener
以及。任何人都可以帮忙吗?onClickListener
ENABLED=false
我有一个layout
带有几个复选框。当一个复选框被选中时,其他复选框被设置为CHECKED=true
and ENABLED=false
。现在我希望用户能够点击任何禁用的复选框,如果他这样做,一个设置为启用并选中,而其他所有复选框都被禁用。
当复选框设置为 时,似乎没有调用onTouchListener
以及。任何人都可以帮忙吗?onClickListener
ENABLED=false
通常这种情况下的行为在 Android 中是一个问号。您可能能够做的一件事是将CheckBox
from 某物的后代ViewGroup
(例如,许多布局FrameLayout
之一)并setOnClickListener
在其上使用。
您无法在禁用的复选框上接收事件。如果您将禁用的复选框放在类似的布局上FrameLayout
,您可以在单击布局时收到事件,但不会在禁用的复选框中。例如,如果要在禁用的复选框上捕获事件,最好的方法是简单地模拟禁用的复选框,然后捕获长按事件以再次激活。
我所做的是一个带有白色文本颜色但以灰色文本颜色开头且未选中的复选框,并带有一个布尔停止变量,您之前在每个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;
}
});
希望这可以帮助你