Android DarkMode : Value night not working

后端 未结 2 1603
离开以前
离开以前 2020-12-19 11:28

I am developing Day/Night feature in my app so I read those documents and start developing it.

It\'s working fine with default value in Day or Night with deligate m

2条回答
  •  情话喂你
    2020-12-19 11:56

    Try below dark mode code which I am use.

    Step - 1

    First of create night folder into your resource file like below image(i.e. values-night)

    Step - 2

    Create styles,strings and colors xml file for night mode same as below image and add your night mode color,string and style which you want to show in your app when night mode was apply.

    For better user experience add window Animation in your style.

    values --> style.xml

    
    
        
        
    
        
    
        
        
    
        
        
    
    
    

    values-night --> style.xml

    
    
    
    
    
    
    
    
    

    fade_in.xml

    
    
        
        
    
    

    fade_out.xml

    
    
        
        
    
    

    Step - 3

    Add this below code in your splash screen if you want to set night mode as per device mode first time when application installed.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (!CommonUtils.isToogleEnabled(SplashActivity.this)) {
            if (CommonUtils.isDarkMode(SplashActivity.this)) {
                CommonUtils.setIsNightModeEnabled(SplashActivity.this, true);
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            } else {
                CommonUtils.setIsNightModeEnabled(SplashActivity.this, false);
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            }
        } else {
            if (CommonUtils.isNightModeEnabled(SplashActivity.this)) {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            } else {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            }
        }
        super.onCreate(savedInstanceState);
    
        ...
        //your code
    }
    

    Step - 4

    Add this below code in your all activity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (CommonUtils.isNightModeEnabled(MainActivity.this)) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        } else {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        }
        super.onCreate(savedInstanceState);
    
        ...
        //your code
    }
    

    Step - 5

    Change mode using below code

    private WeakReference mActivity;
    
    binding.imgNightMode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mActivity = new WeakReference(MainActivity.this);
            CommonUtils.setIsToogleEnabled(MainActivity.this, true);
            if (CommonUtils.isNightModeEnabled(MainActivity.this)) {
                CommonUtils.setIsNightModeEnabled(MainActivity.this, false);
                mActivity.get().recreate();
            } else {
                CommonUtils.setIsNightModeEnabled(MainActivity.this, true);
                mActivity.get().recreate();
            }
        }
    });
    

    Below methods are CommonUtils.

    private static final String NIGHT_MODE = "NIGHT_MODE";
    private static final String TOOGLE = "TOOGLE";
    
    public static boolean isNightModeEnabled(Context context) {
        SharedPreferences mPrefs = context.getSharedPreferences("MY_PREF", MODE_PRIVATE);
        return mPrefs.getBoolean(NIGHT_MODE, false);
    }
    
    public static void setIsNightModeEnabled(Context context, boolean isNightModeEnabled) {
        SharedPreferences mPrefs = context.getSharedPreferences("MY_PREF", MODE_PRIVATE);
        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(NIGHT_MODE, isNightModeEnabled);
        editor.apply();
    }
    
    public static void setIsToogleEnabled(Context context, boolean isToogleEnabled) {
        SharedPreferences mPrefs = context.getSharedPreferences("MY_PREF", MODE_PRIVATE);
        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(TOOGLE, isToogleEnabled);
        editor.apply();
    }
    
    public static boolean isToogleEnabled(Context context) {
        SharedPreferences mPrefs = context.getSharedPreferences("MY_PREF", MODE_PRIVATE);
        return mPrefs.getBoolean(TOOGLE, false);
    }
    
    public static boolean isDarkMode(Activity activity) {
        return (activity.getResources().getConfiguration()
                .uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
    }
    

    I hope this can help you!

    Thank You.

提交回复
热议问题