单击CheckBox中的ClickableSpan可更改其状态

时间:2018-03-13 09:57:04

标签: android checkbox imagespan

我的复选框中有一个ImageSpan和ClickableSpan,在复选框文本的末尾显示图标并点击它。但点击它会更改复选框选中状态,这是不需要的。

当用户点击ClickableSpan时,如何防止更改复选框状态?

对于API 16+,我只需要一些等效的cancelPendingInputEvents()方法。另外,我不想将复选框与复选框和textview分开。

2 个答案:

答案 0 :(得分:0)

您是否使用的解决方案与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分支在触摸链接时也会闪烁复选框,所以我猜这是最好的方法,只需编写自己的复选框小部件即可。

答案 1 :(得分:0)

如果使用跨度子文本内的onclick侦听器将跨度字符串设置为复选框文本。您需要做的就是添加此行,

checkBoxView.setMovementMethod(LinkMovementMethod.getInstance());

你很好。