夜间模式遇到的坑

前文介绍了通过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 设置背景颜色

<WebView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/webView"
    android:background="@color/webviewbg"//  一定要设置背景 否则 webView.setBackgroundColor(0);会报空指针 
    ></WebView>

猜你喜欢

转载自my.oschina.net/u/3729392/blog/1602507