Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当用户单击复选框内的ClickableSpan时,如何阻止复选框被按下的状态?_Android_Android Checkbox_Clickablespan - Fatal编程技术网

Android 当用户单击复选框内的ClickableSpan时,如何阻止复选框被按下的状态?

Android 当用户单击复选框内的ClickableSpan时,如何阻止复选框被按下的状态?,android,android-checkbox,clickablespan,Android,Android Checkbox,Clickablespan,我需要一个复选框,其中包含一个集成的可点击区域,以便在应用程序中显示另一个屏幕。非常有效: CheckBox checkBox = (CheckBox) findViewById(R.id.my_check_box); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { // Prevent CheckBox state

我需要一个
复选框
,其中包含一个集成的可点击区域,以便在应用程序中显示另一个屏幕。非常有效:

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注册并处理单击时,
复选框也会短暂进入按下状态。
复选框的复选框
的行为就像用户单击了它一样,尽管它不会切换实际的选中状态

您可以在这个GIF中看到效果-查看左侧的
复选框的实际框:


当用户单击
复选框的其余部分时,我仍然希望处于按下状态,因此我不想尝试更改背景或其他内容来消除按下状态。是否有办法从
可点击span
中说出“请不要转换到选中状态”

我怀疑您是否能做到这一点。复选框基本上只是一个文本视图,带有一个复合的可绘制和一个布尔值,所以当你按下其中绘制的任何内容时,你就按下了整个视图。它是真的检查了它,还是只是让它看起来像要检查一样?@漫游者:正如你在GIF中看到的,你会看到短暂的按下状态闪烁,但仅此而已。没有实际转换到选中状态。坦白地说,我本来希望
cancelPendingInputEvents()
能够涵盖这一点,这就是为什么我想知道是否有其他东西可以从
onClick()
内部调用,以解决按下的状态。您可以执行
setClickable(false)
,然后将其设置回true。不走运,但这是一件值得尝试的好事情——谢谢!