前文介绍了经过Android Support Library 夜间模式的实现,在实现过程当中遇到一些坑,现记录如下android
1、在设置颜色值的时候,一不当心只在夜间模式中的color设置了,日间模式没有设置,应用切换到夜间模式,能够正常访问,日间模式调用这个颜色值的页面会崩溃,报xml找不到这个颜色值,因此日间模式有,夜间模式无,没问题,夜间模式会读取日间模式的颜色值,相反则会崩溃。web
2、视频播放器全屏播放,切至横屏,再切换回竖屏,日间模式正常,夜间模式下会致使原有页面 重走一遍生命周期,虽然AndroidManifest.xml中设置了缓存
android:configChanges="orientation|keyboardHidden|screenSize“
经过调研发现,夜间模式下横竖屏切换还有触发UImode ,所以需设置app
android:configChanges="orientation|keyboardHidden|screenSize|uiMode"
3、按照原理,日间模式设置了某个drawable selector背景,只需设置其中日、夜中对应的颜色值便可,ui
但某些手机切换了日、夜间模式会出现部分黑、部分白的混乱状况,即便recreate 也无效,缘由是可能读取了上一次的缓存,解决方式是日、夜间各设置一套drawablethis
四 夜间模式下,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
必定要在xml中webview 设置背景颜色生命周期
<WebView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/webView" android:background="@color/webviewbg"// 必定要设置背景 不然 webView.setBackgroundColor(0);会报空指针 ></WebView>