重启activity实现夜间模式
- 修改项目中styles文件
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
-
使用SharedPreference当前存储主题状态
SharedPreferencesUtil
public class SharedPreferencesUtil {
private static SharedPreferences.Editor editor;
//添加ui模式
public static void addModeUI(Context context, boolean bool) {
editor = context.getSharedPreferences("mode", Context.MODE_PRIVATE).edit();
editor.putBoolean("mode_ui", bool);
editor.commit();
}
/**
* * 是否是夜间模式
* <p>
* * @param context
* <p>
* * @return
* <p>
*
*/
public static int getNight(Context context) {
boolean bool = context.getSharedPreferences("mode", Context.MODE_PRIVATE).getBoolean("mode_ui", false);
return bool ? AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO;
}
}
UIModeUtil
public class UIModeUtil {
/**
* * 夜间模式切换
* <p>
*
*/
public static void changeModeUI(AppCompatActivity activity) {
int currentNightMode = activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if (currentNightMode == Configuration.UI_MODE_NIGHT_NO) {
activity.getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
SharedPreferencesUtil.addModeUI(activity.getBaseContext(), true);
} else {
activity.getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
SharedPreferencesUtil.addModeUI(activity.getBaseContext(), false);
}
}
/**
* * 显示当前的模式
* <p>
* * @param activity
* <p>
* * @param mode
* <p>
*
*/
public static void showModeUI(AppCompatActivity activity, int mode) {
activity.getDelegate().setLocalNightMode(mode);
}
}
- 使用步骤(该类必须继承AppCompatActivity)
- 设置布局
<CheckBox
android:id="@+id/head_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="50dp"
android:text="夜间模式"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
- 找控件
View headerView = main_nv.getHeaderView(0);//侧滑菜单的头布局
head_cb = headerView.findViewById(R.id.head_cb);
- 每次执行该方法检查是否设置夜间模式
//每次执行该方法检查是否设置夜间模式
@Override
protected void onStart() {
super.onStart();
int mode = SharedPreferencesUtil.getNight(this);
UIModeUtil.showModeUI(this, mode);
}
- 获取到夜间(白天)模式,设置监听
//获取到夜间(白天)模式
int mode = SharedPreferencesUtil.getNight(this);
if (mode == AppCompatDelegate.MODE_NIGHT_YES) {
head_cb.setChecked(true);
} else {
head_cb.setChecked(false);
}
//设置监听
head_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UIModeUtil.changeModeUI(activity);
recreate();
}
});
网友评论