前文提到webview页面设置夜间模式,当页面是自家h5写的时候,可以通过js 与原生交互、约定url参数等方式实现,但当加载的页面是第三方的页面时,前面的方法则不能实现,开始想到的方法是在webview 上加一个50%透明度的遮罩层,效果也还过得去,但发现今日头条相同的第三方文章居然也可以实现背景灰黑的夜间模式,于是通过研究发现可通过以下方式实现:
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:背景色
webkitTextFillColor:字体颜色
evaluateJavascript 4.4之后新增的用于执行Javascript的api,用webView.loadUrl方式,只能单向的调用js,当js有返回值时,利用前者就无法实现,但evaluateJavascript可以实现
如:
<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(); } });