我有一个TextView,显示一些HTML代码(图像包括,ImageGetter)。 该html不是我的,但我可以要求他们包括自定义计划链接,甚至可能是标签。
目的:显示一些动态生成的内容,无需玩嵌套的Android布局。
问题:一些链接必须在应用程序中处理(新的Fragment已加载)。
不能使用receiver for action.VIEW,因为它是一个活动意图,而不是广播,并且它的使用将非常有用,所以只有通过程序注册的接收器才能做到。我正在使用textView.setText(Html.fromHtml(content.content, imageGetter, null)
。需要一切保持不变,除了一些跨度应该有我自己的onClick
就可以了。我不是很熟悉,跨区,所以我看到这些选项:从Html.fromHtml跨越,但自定义方案的自定义ClickableSpan
- 编辑SpannableStringBuilder从
Html.fromHtml
回来,并用自定义ClickableSpan(如何?) - 如上代替我想URLSpans,但复制所有东西都交给一个新的构建器,为我自己交换URLSpans(
append
只接受CharSequence,我得到RelativeSizeSpan,StyleSpan,ImageSpan,URLSpan ...) - 手动创建一个Spanned。我可以为自定义方案执行此操作,但是如何复制
Html.fromHtml
(或足够近)的效果?
感谢MH。为信息。我曾尝试过,但失败了。现在我回到了它,我发现我犯了一个错误,将错误的项目传递给setSpan的第一个参数。
如果任何人的兴趣,我现在用的这个:
public static interface OnSpanClickListener {
void onClick(String url);
}
public static SpannableStringBuilder getSpannable(String source, ImageGetter imageGetter, String scheme, final OnSpanClickListener clickHandler){
SpannableStringBuilder b = (SpannableStringBuilder) Html.fromHtml(source, imageGetter, null);
for(URLSpan s : b.getSpans(0, b.length(), URLSpan.class)){
String s_url = s.getURL();
if(s_url.startsWith(scheme+"://")){
URLSpan newSpan = new URLSpan(s_url.substring(scheme.length()+3)){
public void onClick(View view) {
clickHandler.onClick(getURL());
}
};
b.setSpan(newSpan, b.getSpanStart(s), b.getSpanEnd(s), b.getSpanFlags(s));
b.removeSpan(s);
}
}
return b;
}
(...)
body.setText(getSpannable(content.content, imageGetter, getResources().getString(R.string.poster_scheme), new OnSpanClickListener(){
public void onClick(String url) {
// do whatever
}
}));