首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android WebView 動態高度自適應內容

     編輯:程式設計綜合問答

問題現象

在迴圈中動態建立多個 WebView 載入 HTML 片段,預設高度僅約 1cm,無法隨內容撐開。設定 setMinimumHeight 或 LayoutParams 皆無效,因為 WebView 載入非同步,渲染完成前高度為 0。

核心解法:包裹在 LinearLayout 中監聽載入完成

LinearLayout container = new LinearLayout(context);
container.setOrientation(LinearLayout.VERTICAL);
container.setLayoutParams(new LinearLayout.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT));

WebView webView = new WebView(context);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        // 載入完成後通知父容器重新測量
        container.requestLayout();
    }
});
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);

container.addView(webView);
parentLayout.addView(container);

關鍵點解析

  • LinearLayout 高度設為 WRAP_CONTENT,才會隨子 View 撐開。
  • onPageFinished 確保 HTML 已渲染,此時 WebView 已有實際高度。
  • 若內容極長,建議關閉 WebView 滾動(setNestedScrollingEnabled(false)),交由外層 ScrollView 或 RecyclerView 統一滾動。

替代方案:JavaScript 回傳高度

若需更精確控制(如多 WebView 共用一個滾動區),可在 HTML 注入 JS:
window.onload = function() { Android.getHeight(document.body.scrollHeight); }
配合 addJavascriptInterface 將高度傳回 Native 端設定 LayoutParams。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved