Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 
like image 965
Ilan Avatar asked Nov 26 '17 11:11

Ilan


People also ask

How do I force Android off dark mode?

Turn Dark theme on or off in your phone's settings On your phone, open the Settings app. Tap Display. Turn Dark theme on or off.

How can I turn on dark mode?

Open your device's Settings app . Select Accessibility. Under "Display," turn on Dark theme.


2 Answers

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

like image 168
Kishan Solanki Avatar answered Oct 05 '22 11:10

Kishan Solanki


Make sure to change the default theme from Theme.AppCompat.Light.DarkActionBar to Theme.AppCompat.DayNight.DarkActionBar in the styles.xml file and then do AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) to switch to the night mode. I have tested it in APIv23(Android 6.0) and above and it is working fine. For a better explanation see this codelab by Android

like image 42
Neeraj Sewani Avatar answered Oct 05 '22 10:10

Neeraj Sewani