force dark mode in android is not responding

前端 未结 1 414
醉话见心
醉话见心 2021-01-28 03:59

I am trying to implement dark theme as described here. So, I have created arrays.xml as:


  
           


        
相关标签:
1条回答
  • 2021-01-28 04:35

    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.

    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<Activity> mActivity;
    
    binding.imgNightMode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mActivity = new WeakReference<Activity>(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.

    0 讨论(0)
提交回复
热议问题