在迴圈中動態建立多個 WebView 載入 HTML 片段,預設高度僅約 1cm,無法隨內容撐開。設定 setMinimumHeight 或 LayoutParams 皆無效,因為 WebView 載入非同步,渲染完成前高度為 0。
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 統一滾動。若需更精確控制(如多 WebView 共用一個滾動區),可在 HTML 注入 JS:
window.onload = function() { Android.getHeight(document.body.scrollHeight); }
配合 addJavascriptInterface 將高度傳回 Native 端設定 LayoutParams。