Android Studio实现WebView无法显示导航菜单及背景logo问题问询
问题背景
我尝试使用Android Studio和Java为我的站点实现WebView加载功能,相关代码如下:
- MainActivity.java
package com.example.neurofinance; import androidx.appcompat.app.AppCompatActivity; import android.annotation.TargetApi; import android.net.http.SslError; import android.os.Build; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.webkit.SslErrorHandler; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { return true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); WebView webView = findViewById(R.id.webView); //WebSettings webSettings = webView.getSettings(); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setJavaScriptEnabled(true); // webSettings.setJavaScriptEnabled(true); // webSettings.setDomStorageEnabled(true); webView.getSettings().setUseWideViewPort(true);//setting wide view webView.getSettings().setLoadWithOverviewMode(true);//setting default zoomed out view webView.setInitialScale(1); webView.getSettings().setBuiltInZoomControls(true);//setting zoom controls webView.loadUrl("www.URL.com"); WebViewClient webViewClient = new WebViewClient() { @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }; webView.setWebViewClient(webViewClient); } }
- AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.neurofinance"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize">> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
- activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
问题描述
当前我的WebView无法正常显示导航菜单(三点图标)和横幅背景,效果对比图如下,左侧为WebView加载效果,右侧为站点本身的正常展示效果:
我尝试添加了如下配置但未解决问题:
webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true);
请问还有什么可行的解决办法?
解决方案
按优先级依次尝试以下操作即可:
- 补充WebSettings缺失配置
默认WebView对现代前端特性的支持有限,在现有配置基础上添加如下代码:
WebSettings webSettings = webView.getSettings(); // 兼容混合内容加载,解决https站点加载http资源失败的问题 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); } // 开启数据库存储,适配部分前端框架的存储依赖 webSettings.setDatabaseEnabled(true); // 允许JS自动打开窗口,适配弹窗类导航菜单的逻辑 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 对齐移动端浏览器的UserAgent,避免站点返回不兼容的桌面端样式 webSettings.setUserAgentString(webSettings.getUserAgentString().replace("; wv", "")); // 隐藏缩放控件,避免遮挡导航栏元素 webSettings.setDisplayZoomControls(false);
- 修复全屏适配问题
你当前开启了沉浸全屏模式,站点顶部元素可能被系统状态栏遮挡,可以给WebView添加顶部适配:
// 获取状态栏高度 int statusBarId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (statusBarId > 0) { int statusBarHeight = getResources().getDimensionPixelSize(statusBarId); webView.setPadding(0, statusBarHeight, 0, 0); }
- 修正加载地址格式
你当前的加载地址没有带http/https协议头,会导致WebView无法正常识别资源路径,改为完整地址即可:
webView.loadUrl("https://www.URL.com"); // 替换为你的实际站点地址
- 修复Manifest配置错误
你的AndroidManifest里Activity标签多了一个多余的闭合尖括号,删除即可避免配置异常:
<!-- 修改前 --> <activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize">> <!-- 修改后 --> <activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize">
内容的提问来源于stack exchange,提问作者ElonMuskofBadIdeas
相关产品推荐
相关产品推荐

