我的复选框中有一个ImageSpan和ClickableSpan,可以在复选框文本的末尾显示图标并处理单击它。但是单击它会更改复选框选中状态,这是不需要的。
如何防止在用户单击 ClickableSpan 时更改复选框状态?
简单地说,我需要一些等效的 API 16+ cancelPendingInputEvents()
方法。我也不想将复选框与复选框和文本视图分开。
您是否使用类似于 https://stackoverflow.com/a/47166879/172690 中概述的解决方案?如果是这样,我发现以下onClick
实现是功能性的:
@Override
public void onClick(View widget) {
// Prevent CheckBox state from being toggled when link is clicked
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
widget.cancelPendingInputEvents();
} else {
if (widget instanceof CheckBox) {
CheckBox checkbox = (CheckBox) widget;
boolean state = checkBox.isChecked();
checkBox.post(new Runnable() {
@Override public void run() {
checkBox.setChecked(state);
}
});
}
}
// Do action for link text...
}
实质上,状态在处理单击期间保存,然后发布,以便可以恢复。可以想象,该复选框在按下可单击的可跨度时确实会闪烁和动画。但是,即使是cancelPendingInputEvents
分支也会在触摸链接时闪烁复选框,所以我的猜测是,这是您可以做的最好的事情,而无需编写自己的复选框小部件。
如果您使用可触发字符串设置复选框文本,并在可跨度子文本中使用 onclick 侦听器。您需要做的就是添加此行,
checkBoxView.setMovementMethod(LinkMovementMethod.getInstance());
你很好去。