背景
我想在 textView 中使用一些 URLSpan,所以我使用了类似的东西:
final Spanned spanned=Html.fromHtml(getString(R.string.test));
msgTextView.setText(spanned);
问题
它可以工作,但是当单击一个项目时,它会保持单击状态。好像我还在触摸链接...
我试过的
我试图从 textView 中清除焦点并将焦点设置在另一个视图上,但这些都没有帮助。
我还尝试删除 UrlSpan 并添加一个新的,每次单击它时,它都不起作用。这是代码:
public static Spannable setOnLinkClickedListener(final Spanned original,final IOnLinkClickListener listener)
{
final SpannableString result=new SpannableString(original);
final URLSpan[] spans=result.getSpans(0,result.length(),URLSpan.class);
for(final URLSpan span : spans)
{
final int start=result.getSpanStart(span);
final int end=result.getSpanEnd(span);
final int flags=result.getSpanFlags(span);
result.removeSpan(span);
final String url=span.getURL();
result.setSpan(new CustomURLSpan(url,start,result,end,listener,flags),start,end,flags);
}
return result;
}
private static final class CustomURLSpan extends URLSpan
{
private final int _start;
private final SpannableString _result;
private final String _url;
private final int _end;
private final IOnLinkClickListener _listener;
private final int _flags;
private CustomURLSpan(final String url,final int start,final SpannableString result,final int end,final IOnLinkClickListener listener,final int flags)
{
super(url);
_start=start;
_result=result;
_url=url;
_end=end;
_listener=listener;
_flags=flags;
}
@Override
public void onClick(final View widget)
{
if(_listener==null||!_listener.onClick(widget,_url))
super.onClick(widget);
_result.removeSpan(this);
_result.setSpan(new CustomURLSpan(_url,_start,_result,_end,_listener,_flags),_start,_end,_flags);
}
}
问题
如何清除每次单击时保留在 URLSpan 上的选择/单击效果?