'How to get AppCompatDelegate current mode if default is auto
I have activity like this:
package com.nkdroid.daynighttheme;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AppCompatDelegate;
import android.widget.TextView;
public class ModeActivity extends AppCompatActivity {
private TextView txtModeType;
int modeType;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_mode);
txtModeType = (TextView) findViewById(R.id.txtModeType);
modeType = AppCompatDelegate.getDefaultNightMode();
if (modeType == AppCompatDelegate.MODE_NIGHT_AUTO) {
txtModeType.setText("Default Mode: Auto");
} else if (modeType == AppCompatDelegate.MODE_NIGHT_YES) {
txtModeType.setText("Default Mode: Night");
} else if (modeType == AppCompatDelegate.MODE_NIGHT_NO) {
txtModeType.setText("Default Mode: Day");
}
}
}`
Is it possible to get which mode (day or night) is active now if default mode set to AUTO?
Solution 1:[1]
Somehow @harshithdwivedi's answer didn't work for me when the night mode is set from inside the app (using AppCompatDelegate). Otherwise it works fine.
So I had to add some additional checks like this:
public static boolean isNightModeActive(Context context) {
int defaultNightMode = AppCompatDelegate.getDefaultNightMode();
if (defaultNightMode == AppCompatDelegate.MODE_NIGHT_YES) {
return true;
}
if (defaultNightMode == AppCompatDelegate.MODE_NIGHT_NO) {
return false;
}
int currentNightMode = context.getResources().getConfiguration().uiMode
& Configuration.UI_MODE_NIGHT_MASK;
switch (currentNightMode) {
case Configuration.UI_MODE_NIGHT_NO:
return false;
case Configuration.UI_MODE_NIGHT_YES:
return true;
case Configuration.UI_MODE_NIGHT_UNDEFINED:
return false;
}
return false;
}
Solution 2:[2]
If you are a kotlin developer, then you can use the code below to check which mode your app is in..
val mode = context?.resources?.configuration?.uiMode? and Configuration.UI_MODE_NIGHT_MASK
when (mode) {
Configuration.UI_MODE_NIGHT_YES -> {}
Configuration.UI_MODE_NIGHT_NO -> {}
else -> {} //covers Configuration.UI_MODE_NIGHT_UNDEFINED
}
For more about the dark theme modes see;
Solution 3:[3]
More simple way...
val Context.isDarkMode
get() = if (getDefaultNightMode() == MODE_NIGHT_FOLLOW_SYSTEM)
resources.configuration.uiMode and UI_MODE_NIGHT_MASK == UI_MODE_NIGHT_YES
else getDefaultNightMode() == MODE_NIGHT_YES
Solution 4:[4]
mode = AppCompatDelegate.getDefaultNightMode();
SharedPreferences preferencesnight = android.preference.PreferenceManager.getDefaultSharedPreferences(MyApplication.this);
if (preferencesnight.getBoolean(KEY_SIGNATURE,false))
{
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
else if(mode == AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
{
AppCompatDelegate.setDefaultNightMode(mode);
}
else
{
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | algrid |
| Solution 2 | KraffMann |
| Solution 3 | Renetik |
| Solution 4 | Starbax |
