2019独角兽企业重金招聘Python工程师标准>>>
前文介绍了通过Android Support Library 夜间模式的实现,在实现过程中遇到一些坑,现记录以下
一、在设置颜色值的时候,一不小心只在夜间模式中的color设置了,日间模式没有设置,应用切换到夜间模式,可以正常访问,日间模式调用这个颜色值的页面会崩溃,报xml找不到这个颜色值,所以日间模式有,夜间模式无,没问题,夜间模式会读取日间模式的颜色值,相反则会崩溃。
二、视频播放器全屏播放,切至横屏,再切换回竖屏,日间模式正常,夜间模式下会导致原有页面 重走一遍生命周期,虽然AndroidManifest.xml中设置了
android:configChanges="orientation|keyboardHidden|screenSize“
通过调研发现,夜间模式下横竖屏切换还有触发UImode ,因此需设置
android:configChanges="orientation|keyboardHidden|screenSize|uiMode"
三、按照原理,日间模式设置了某个drawable selector背景,只需设置其中日、夜中对应的颜色值即可,
但某些手机切换了日、夜间模式会出现部分黑、部分白的混乱情况,即使recreate 也无效,原因是可能读取了上一次的缓存,解决方式是日、夜间各设置一套drawable
四 夜间模式下,webview h5设置了 黑色背景,app加载会先闪白一下再黑,研究发现会先展示webview 自带的白色背景
解决方案:设置webview背景透明
protected void setWebViewNightModel(WebView webView){ try { if (SharedpreferencesUtil.isNightMode(this)) { webView.setBackgroundColor(0); // 设置背景色 xml 一定要设置background 否则此处会报空指针 webView.getBackground().setAlpha(0); // 设置填充透明度 范围:0-255 } } catch (Exception e) { e.printStackTrace(); } }
五 webview 设置透明背景 webView.setBackgroundColor(0);,运行崩溃
一定要在xml中webview 设置背景颜色