androidandroid-dark-themeandroid-night-modeandroid-darkmode

How to enable night mode programmatically?


I am looking for a way to enable night mode programmatically with an Android code:

public static void setNightMode(Context target, boolean state){

    UiModeManager uiManager = (UiModeManager) target.getSystemService(Context.UI_MODE_SERVICE);

    if (state) {
        //uiManager.enableCarMode(0);
        uiManager.setNightMode(UiModeManager.MODE_NIGHT_YES);
    } else {
        // uiManager.disableCarMode(0);
        uiManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
    }
}

Nothing has changed on my screen, the night mode is still disables. According to this link

There is no need to enable carMode or deskMode. I have the following logcat on Android Studio:

11-26 12:15:16.662 3823-3823/? D/UiModeManager: updateConfigurationLocked: mDockState=0; mCarMode=false; mNightMode=2; uiMode=33
11-26 12:15:26.802 3823-3823/? V/UiModeManager: updateLocked: null action, mDockState=0, category=null

Solution

  • SIMPLEST SOLUTION

    You can enable/disable application's dark theme just by:

    1. enable dark theme:

       AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
      
    2. forcefully disable dark theme:

       AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
      
    3. set app theme based on mobile settings of dark mode, i.e. if dark mode is enabled then the theme will be set to a dark theme, if not then the default theme, but this will only work in version >= Android version Q (10)

       AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
      

    Notes:

    1. Your base theme for app/activity should be

    "Theme.AppCompat.DayNight"

    like

    <style name="DarkTheme" parent="Theme.AppCompat.DayNight">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    
    1. Your res folder's names would end with -night so that different colors and images you can set for day and night themes like

    drawable & drawable-night,
    values & values-night