解決ScrollView+WebView,改變字體大小,頁面留白。(loadDataWithBaseURL同樣解決)

前言

????老規(guī)矩,先感覺給我提供思路的作者及文章《ScrollView與WebView結合使用時,設置webview字體大小的時候出現(xiàn)下方留白的終極解決方案》。
????因為需求的原因,需要上面是網頁,下面是一些推薦。上級不想用網頁去展示,因為打開速度太慢了。只能通過加載數(shù)據,獲取html源代碼展示出網頁,然后獲取推薦內容,通過ListView展示數(shù)據。這時候我想了有兩種方案,一種是ScrollView+WebView+ListView,以及一種是拼接HTML。結果上級又不讓用拼接HTML,只能使用ScrollView+WebView方案,如果沒有設置字體大小這種產品需求,我也不會有這個問題,正式因為這種需求,加上這個方案,才搞出來這個幺蛾子,。

解決方案

思路還是通過JS去獲取body內容的Height。

step.1 設置JS接口監(jiān)聽

    @JavascriptInterface
    fun resize(height: Int) {
        LogUtils.i("resize contentHeight=$height Height=${height * resources.displayMetrics.density} ")
        runOnUiThread {
            val wblp = webView?.layoutParams
            wblp?.height = (height * resources.displayMetrics.density).toInt()
            webView?.layoutParams = wblp
        }
    }

step.2 注冊JS方法

    webView?.addJavascriptInterface(this, "notifyResize")

step.3 設置setting.textZoom去改變字體的大小

      webView?.settings?.textZoom = when (it) {
         0 -> 80
         1 -> 100
         2 -> 120
         3 -> 140
         else -> 100
      }

     webView?.loadUrl("javascript:window.notifyResize.resize(document.body.getBoundingClientRect().height);")



但是我一度疑惑,這個方法和webView?.contentHeight有什么區(qū)別呢?雖然獲取的到是html的真實高度,然后乘以屏幕密度,和webView?.contentHeight的高度是一樣的啊。
而且我設置放大后,再縮小字體依舊并不生效。contentHeight一直就是最大狀態(tài)了。


為什么大家都推崇這個解決方案,但是我不生效呢?
后來繼續(xù)查原因,才發(fā)現(xiàn)大家都一樣。如果您使用的是webView?.loadUrl,使用這個方案是可以的,但是如果您使用的是webView?.loadDataWithBaseURL就會失敗。


重要的來了,那使用webView?.loadDataWithBaseURL這個方案怎么解決呢?
我們只要添加下面這段代碼,重新設置body的高度就可以了。
webView?.loadUrl("javascript:(function() {document.body.style.height='initial';})()")

最終使用

      viewModel.contentSize.observe(viewLifecycleOwner, Observer {
            webView?.settings?.textZoom = when (it) {
                0 -> 80
                1 -> 100
                2 -> 120
                3 -> 140
                else -> 100
            }

            webView?.loadUrl("javascript:(function() {document.body.style.height='initial';})()")
            webView?.loadUrl("javascript:window.notifyResize.resize(document.body.getBoundingClientRect().height);")
     })
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容