我在TextEdit中设置了ImageSpan。我想添加动作 - 当用户点击ImageSpan时,它会弹出一个对话框并显示大图。
我检查了SDK,似乎ImageSpan不支持onclick。反正是否支持ImageSpan或支持Image的其他Span的onclick?
我检查了代码,发现有一个用ImageSpan创建的URLSpan,因为输入字符串是
但似乎URLSpan不起作用,并且没有为它创建点击操作。有什么想法吗?
感谢。
答案 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)
首先,从属性中单击区域。
执行自定义操作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;
}
}