Android TextView设置HTML片段,加载图片以及点击超链接跳转到内部Activity,webview。

tvReplay.setText(setTextLinkOpenByWebView(tvReplay,m_Instance,entity.getData().getReply()));

tvReplay.setMovementMethod(LinkMovementMethod.getInstance());//必须写!


setTextLinkOpenByWebView方法:onclick自行设置跳转webviewActivity

public pannableStringBuildersetTextLinkOpenByWebView(final TextView tvReplay,final Context context, String answerString) {

if (!TextUtils.isEmpty(answerString)) {

Spanned htmlString = Html.fromHtml(answerString,new MImageGetter(tvReplay, context.getApplicationContext()), null);

        if (htmlStringinstanceof SpannableStringBuilder) {

SpannableStringBuilder spannableStringBuilder = (SpannableStringBuilder) htmlString;

            // 取得与a标签相关的Span

            Object[] objs = spannableStringBuilder.getSpans(0, spannableStringBuilder.length(), URLSpan.class);

            if (null != objs && objs.length !=0) {

for (Object obj : objs) {

int start = spannableStringBuilder.getSpanStart(obj);

                    int end = spannableStringBuilder.getSpanEnd(obj);

                    if (objinstanceof URLSpan) {

//先移除这个Span,再新添加一个自己实现的Span。

                        URLSpan span = (URLSpan) obj;

                        final String url = span.getURL();

                        spannableStringBuilder.removeSpan(obj);

                        spannableStringBuilder.setSpan(new ClickableSpan() {

@Override

                            public void onClick(View widget) {

ToWebViewUtil.toWeb((Activity)context,0,url);

                            }

}, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

                    }

}

}

return spannableStringBuilder;

        }

}

return new SpannableStringBuilder(answerString);

}

加载HTML片段图片:方法

public class MImageGetterimplements Html.ImageGetter {

Contextc;

    TextViewcontainer;

    public MImageGetter(TextView text,Context c) {

this.c = c;

        this.container = text;

    }

public DrawablegetDrawable(String source) {

final LevelListDrawable drawable =new LevelListDrawable();

        Glide.with(c).load(source).asBitmap().into(new SimpleTarget() {

@Override

            public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {

if(resource !=null) {

BitmapDrawable bitmapDrawable =new BitmapDrawable(resource);

                    drawable.addLevel(1, 1, bitmapDrawable);

                    drawable.setBounds(0, 0, resource.getWidth(),resource.getHeight());

                    drawable.setLevel(1);

                    container.invalidate();

                    container.setText(container.getText());

                }

}

});

        return drawable;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容