前文介紹了經過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>