Html.fromHtml采坑篇

在显示复杂的文本样式时,通常采用SpannableString和Html.formHtml来解决需求。

在使用html过程中,通常会出现以下问题:

1、提示Html.formHtml方法过时

解决

使用API Level 23或之前的设备可以用过时的方法,API Level 24或以上的设备则使用2个参数的方法(fromHtml(String source, int flags) )即可。 

即:

        TextView tv_text = (TextView) findViewById(R.id.tv_text);
        CharSequence charSequence;
        String content = "<p>简介:</p><p>1.nickname:wildma!</p><p>2.职业:android攻城狮</p>";
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            charSequence = Html.fromHtml(content,Html.FROM_HTML_MODE_LEGACY);
        } else {
            charSequence = Html.fromHtml(content);
        }
        tv_text.setText(charSequence);

其中的flags表示: 
FROM_HTML_MODE_COMPACT:html块元素之间使用一个换行符分隔 
FROM_HTML_MODE_LEGACY:html块元素之间使用两个换行符分隔

1、提示Html.formHtml方法标签无效(<del>中划线为例说明)

解决

 String contentStr = "是否确认还款%1$s元?(包含本金:%2$s元;利息:<del>%3$s</del>元,<font color=\"#FF9302\">%4$s元</font>;服务费:<del>%5$s</del>元,<font color=\"#FF9302\">%6$s元</font>)";
 
dialog.setContentStr(Html.fromHtml(contentStr, null, new Html.TagHandler() {
                                int startTag;
                                int endTag;
                                @Override
                                public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
                                    if (tag.equalsIgnoreCase("del")){
                                        if(opening){
                                            startTag = output.length();
                                        }else{
                                            endTag = output.length();
                                            output.setSpan(new StrikethroughSpan(),startTag,endTag, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                                        }
                                    }
                                }
                            }));

猜你喜欢

转载自www.cnblogs.com/ggband/p/10303791.html