如何为ImageSpan添加单击操作

Joh*_* Wu 16 android

我在TextEdit中设置了ImageSpan.我想添加动作 - 当用户点击ImageSpan时,它会弹出一个对话框并显示大图像.

我检查了SDK,似乎ImageSpan不支持onclick.反正是否支持ImageSpan或支持Image的其他Span的onclick?

我检查了代码,发现有一个用ImageSpan创建的URLSpan,因为输入字符串是

但似乎URLSpan不起作用,并且没有为它创建单击操作.任何的想法?

谢谢.

bas*_*asv 13

我一直在努力解决同样的问题并找到解决方案.要使图像可单击,您需要将ClickableSpan对象附加到与ImageSpan相同的图像范围.当您从Html.fromHtml()获取Spanned对象时,您可以浏览为其分配的ImageSpan对象集并附加其他ClickableSpan对象.

像这样:

            ImageSpan[] image_spans = s.getSpans(0, s.length(), ImageSpan.class);

            for (ImageSpan span : image_spans) {

                final String image_src = span.getSource();
                final int start = s.getSpanStart(span);
                final int end = s.getSpanEnd(span);

                ClickableSpan click_span = new ClickableSpan() {

                    @Override
                    public void onClick(View widget) {

                        Toast.makeText(HtmlImagesTestActivity.this,
                                "Image Clicked " + image_src,
                                Toast.LENGTH_SHORT).show();

                    }

                };

                ClickableSpan[] click_spans = s.getSpans(start, end, ClickableSpan.class);

                if(click_spans.length != 0) {

                    // remove all click spans

                    for(ClickableSpan c_span : click_spans) {
                        s.removeSpan(c_span);
                    }


                }


                s.setSpan(click_span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            }               
Run Code Online (Sandbox Code Playgroud)

  • 对于Spanned类型,方法setSpan(ClickableSpan,int,int,int)是未定义的,不是变量s是Spanned类的实例吗? (2认同)

小智 10

我找到了关键点.为了响应点击动作,我们不仅设置了clickablespan,还设置了edittext'setMovementMethod,代码如下:

EditText.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)

这是问题所在.如果设置setMovementMethodLinkMovementMethod.getInstance(),则edittext的光标将消失.我不知道为什么


Vin*_*ay 0

首先,使该区域可从属性中单击。
接下来,添加 OnClickListner 。

执行您的自定义操作 onclick 方法。