夜间模式

2020-08-23  本文已影响0人  魔女小姐的猫

重启activity实现夜间模式

  1. 修改项目中styles文件
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
  1. 使用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);
    }
}
  1. 使用步骤(该类必须继承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();
           }
       });

来自于

上一篇下一篇

猜你喜欢

热点阅读