Android 富文本處理

最近遇到了一些富文本處理的坑,特此分享下

TextView

Html.fromHtml(data.getPro_job()) 這個方式最簡單,缺陷是不能解析ulli等類型標籤。javascript

RichText

RichText.from(data.getPro_job()).into(wvDes);html

RichText 是Android平臺下的富文本解析器,支持Html和Markdown,這樣就能夠解析ul等標籤,但缺陷是字體樣式加載會有問題,好比說加粗、顏色等。java

WebView

建議使用騰訊x5瀏覽器,使用方法可查看另外一篇博客【Android Web】騰訊X5瀏覽器的集成與常見問題git

webView.loadDataWithBaseURL("", data.getPro_intro(), "text/html", "utf-8", null);github

webview在解析標籤上沒有問題,可是又引起了另外一個問題,ScrollView嵌套下,底部會有一大片的空白。web

這個問題有2種處理方式瀏覽器

  • 獲取html的內容高度,而後再設置給webview
wvDes.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView webView, String s) {
                super.onPageFinished(webView, s);
                wvDes.loadUrl("javascript:app.resize(document.body.getBoundingClientRect().height)");
            }
        });

        wvDes.addJavascriptInterface(new WebViewJavaScriptFunction() {
            @Override
            public void onJsFunctionCalled(String tag) {

            }

            @JavascriptInterface
            public void resize(int height) {
                wvDes.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height + 80);
                        wvDes.setLayoutParams(params);
                    }
                }, 100);

            }

        }, "app");
複製代碼

可是,經測試,在部分華爲手機上,document.body.getBoundingClientRect().height獲取的高度不正確,只能無奈放棄。app

  • addView
mParentLayout.removeAllViews();
        WebView webView = new WebView(this);
        webView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        webView.loadDataWithBaseURL("", data.getPro_intro(), "text/html", "utf-8", null);
        mParentLayout.addView(webView);
複製代碼

目前衆多機型測試中沒有發現問題,有問題的小夥伴,能夠在下面留言。ide

你的承認,是我堅持更新博客的動力,若是以爲有用,就請點個贊,謝謝

相關文章
相關標籤/搜索