Android夜晚模式實現(xiàn)
上圖
S71031-13270753.jpg
超簡單的實現(xiàn)白天夜晚模式,前提是都是Android高版本的系統(tǒng)。當然相信現(xiàn)在適配的大多數(shù)已經(jīng)是高版本的系統(tǒng)了,4.4的一般也不會適配了吧
compile 'com.android.support:appcompat-v7:25.+'
相信你不會低于這個包吧'Activity'才會繼承'AppCompatActivity'
其實方法很簡單就是一個方法就可以實現(xiàn)
private void setNightMode() {
// 獲取當前模式
int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
// 將是否為夜間模式保存到SharedPreferences
// 切換模式
getDelegate().setDefaultNightMode(isNight ?
AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES);
// 重啟Activity
recreate();
}
public void change(View view) {
setNightMode();
isNight=!isNight;
}
如上所示
getDelegate().setDefaultNightMode(isNight ?
AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES);
其實就是這個方法起的作用,當你調用這個方法的時候,系統(tǒng)就會相應的切換到你所需要的模式,前期你需要做一些簡單的配置。如下:
新建values-night目錄,如下:
在這里面新建一個values-night,在res 目錄下。在values-night新建一個colors.xml
接下來只需要在對應的colors文件下寫不同的顏色值(夜間顏色值和白天顏色值)即可。至此關于實現(xiàn)夜間模式的配置已經(jīng)基本完成。
'AppCompatDelegate.setDefaultNightMode(mode)',其中mode有一下四個值:
MODE_NIGHT_NO: 亮色(light)主題,不使用夜間模式
MODE_NIGHT_YES:暗色(dark)主題,使用夜間模式
MODE_NIGHT_AUTO:根據(jù)當前時間自動切換 亮色(light)/暗色(dark)主題(22:00-07:00時間段內自動切換為夜間模式)
MODE_NIGHT_FOLLOW_SYSTEM(默認選項):設置為跟隨系統(tǒng),通常為MODE_NIGHT_NO
這個時候,只需要你調用之前的方法就可以實現(xiàn)了。 'getDelegate().setDefaultNightMode(isNight ? AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES);'
第二次進入這個頁面就可以實現(xiàn)主題的更換了。
有些手機自定義了Activity的進入方式的,不會出現(xiàn)閃動,但是有些手機就會出現(xiàn)閃動。可以使用'Activity'的轉場動畫,過度,點擊之后finish掉
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("nightMode", true);
startActivity(intent);
overridePendingTransition(R.anim.animo_alph_close, R.anim.activity_close);
這樣實現(xiàn)不會閃動的效果
其次就是全局的夜間模式了,可以在自己的MyApplication里面實現(xiàn),把我們的設置保存在SharePresference里面,在MyApplication里面調用
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// 獲取到SharePresference里面的boolean值,判斷使用那種模式
// AppCompatDelegate.setDefaultNightMode(false ?
// AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO);
}
}