如何让AlertDialog中加载的WebView占满其全部显示区域?
问题原因
你遇到的问题是三个核心原因导致的:
- 直接创建的WebView没有指定布局参数,默认高度为WRAP_CONTENT,仅能包裹内容高度,无法撑满父容器
- AlertDialog的根布局(DecorView)默认带有系统自带的上下左右内边距,挤压了WebView的展示空间
- 若加载的HTML本身没有给
<html>、<body>标签设置height:100%、清除默认边距,也会出现上下空白
修复方案
按以下步骤修改你的代码即可实现WebView全屏效果:
- 创建WebView后立即设置宽高为匹配父布局的参数
- 给Dialog的DecorView清除默认内边距
- 可选:调整加载的HTML全局样式,消除网页自带边距
修改后可运行代码
WebView myMsg = new WebView(context); // 新增:给WebView设置匹配父布局的参数 myMsg.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT )); myMsg.getSettings().setJavaScriptEnabled(js); myMsg.setVerticalScrollBarEnabled(overflow); myMsg.setHorizontalScrollBarEnabled(overflow); myMsg.getSettings().setAllowContentAccess(true); myMsg.getSettings().setAllowFileAccess(true); myMsg.getSettings().setLoadWithOverviewMode(true); myMsg.getSettings().setUseWideViewPort(true); myMsg.getSettings().setBuiltInZoomControls(true); myMsg.getSettings().setDisplayZoomControls(false); myMsg.setInitialScale(1); myMsg.setWebViewClient(new WebViewClient() { @Override // Prevents exposing the URI in API>26 ! public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); myMsg.loadUrl(page); myMsg.setBackgroundColor(0); myMsg.setSoundEffectsEnabled(true); AlertDialog.Builder builder = new AlertDialog.Builder(context) .setView(myMsg) .setIcon(R.drawable.ic_launcher); final AlertDialog dialog = builder.create(); Window dialogWin = dialog.getWindow(); dialog.show(); if (dialogWin != null) { dialogWin.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialogWin.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); dialogWin.setFlags(android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN, android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN); // 新增:清除DecorView默认内边距 dialogWin.getDecorView().setPadding(0, 0, 0, 0); }
HTML端可选配置
如果你能修改加载的HTML文件,在<head>里加入以下样式,能彻底清除HTML自带的边距,实现完全无边框全屏效果:
html, body { margin: 0; padding: 0; height: 100%; width: 100%; }
内容的提问来源于stack exchange,提问作者Luis A. Florit
相关产品推荐
相关产品推荐

