我需要一个CheckBox
包含一个集成的可点击区域以在应用程序中调出另一个屏幕。这个解决方案非常有效:
CheckBox checkBox = (CheckBox) findViewById(R.id.my_check_box);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
// Prevent CheckBox state from being toggled when link is clicked
widget.cancelPendingInputEvents();
// Do action for link text...
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// Show links with underlines (optional)
ds.setUnderlineText(true);
}
};
SpannableString linkText = new SpannableString("Link text");
linkText.setSpan(clickableSpan, 0, linkText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
CharSequence cs = TextUtils.expandTemplate(
"CheckBox text with link: ^1 , and after link", linkText);
checkBox.setText(cs);
// Finally, make links clickable
checkBox.setMovementMethod(LinkMovementMethod.getInstance());
...除了我遇到了与此评论中提到的相同的问题。当用户点击ClickableSpan
时,点击被 span 注册和处理,CheckBox
同时也短暂地进入按下状态。该框的CheckBox
行为就像用户单击它一样,尽管它不会切换实际的选中状态。
您可以在此 GIF 中看到效果 - 观看CheckBox
左侧的实际框:
当用户单击其余部分时,我仍然想要那种按下状态CheckBox
,所以我不想尝试更改背景或其他东西来消除按下状态。有没有办法ClickableSpan
说“请不要转换到检查状态”?