美文网首页
夜间模式

夜间模式

作者: 魔女小姐的猫 | 来源:发表于2020-08-23 13:15 被阅读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();
               }
           });
    

    来自于

    相关文章

      网友评论

          本文标题:夜间模式

          本文链接:https://www.haomeiwen.com/subject/nbvijktx.html