如何为ImageSpan添加单击操作

时间:2011-04-07 02:58:28

标签: android

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

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

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

但似乎URLSpan不起作用,并且没有为它创建点击操作。有什么想法吗?

感谢。

5 个答案:

答案 0 :(得分:12)

我一直在努力解决同样的问题并找到解决方案。 要使图像可单击,您需要将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);

            }               

答案 1 :(得分:9)

我找到了关键点。为了响应点击动作,我们不仅设置了clickablespan,还设置了edittext'setMovementMethod,代码是这样的:

EditText.setMovementMethod(LinkMovementMethod.getInstance());

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

答案 2 :(得分:0)

首先,从属性中单击区域。 接下来,添加OnClickListener。

执行自定义操作onclick方法。

答案 3 :(得分:0)

您可能希望使用ClickableSpan结帐并将TextView附加到LinkMovementMethod并覆盖其onTouchEvent等....

希望有所帮助

答案 4 :(得分:0)

在上面的 miaohua1982 回答之后,很明显在将setmovement方法设置为LinkMovementmethod后光标被禁用。我在textview中遇到了类似的问题,其中动作模式(将出现在textview的LongPress上)被取消,我没有得到任何动作项。我通过扩展LinkMovementMethod并覆盖如下方法解决了这个问题。我希望即使在editext中也解决了这个问题。

class MyMovementMethod extends LinkMovementMethod{

 @Override
  public boolean canSelectArbitrarily() {
       return true;
    }    

}