前文提到webview頁面設置夜間模式,當頁面是自家h5寫的時候,能夠經過js 與原生交互、約定url參數等方式實現,但當加載的頁面是第三方的頁面時,前面的方法則不能實現,開始想到的方法是在webview 上加一個50%透明度的遮罩層,效果也還過得去,但發現今日頭條相同的第三方文章竟然也能夠實現背景灰黑的夜間模式,因而經過研究發現可經過如下方式實現:javascript
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { webView.evaluateJavascript("document.body.style.backgroundColor=\"#222222\";document.getElementsByTagName('body')[0].style.webkitTextFillColor= '#8a8a8a';", null); } else { webView.loadUrl("javascript:document.body.style.backgroundColor=\"#222222\";document.getElementsByTagName('body')[0].style.webkitTextFillColor= '#8a8a8a';"); }
backgroundColor:背景色java
webkitTextFillColor:字體顏色web
evaluateJavascript 4.4以後新增的用於執行Javascript的api,用webView.loadUrl方式,只能單向的調用js,當js有返回值時,利用前者就沒法實現,但evaluateJavascript能夠實現api
如:ide
<script type="text/javascript"> function getMusicStatus(){ return "1"; } </script>
webView.evaluateJavascript("getMusicStatus()", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Toast.makeText(MainActivity.this, "返回值"+value, Toast.LENGTH_SHORT).show(); } });