Ilán
Estoy buscando una manera de habilitar el modo nocturno mediante programación con un código de Android:
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);
}
}
Nada ha cambiado en mi pantalla, el modo nocturno aún está desactivado. De acuerdo a esto enlace
No es necesario habilitar carMode o deskMode. Tengo el siguiente logcat en 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
Kishan Solanki
LA SOLUCIÓN MÁS SENCILLA
Puede habilitar/deshabilitar el tema oscuro de la aplicación con solo:
-
habilitar tema oscuro:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
-
deshabilitar a la fuerza el tema oscuro:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
-
configure el tema de la aplicación según la configuración móvil del modo oscuro, es decir, si el modo oscuro está habilitado, el tema se establecerá en un tema oscuro, si no, entonces el tema predeterminado, pero esto solo funcionará en versión >= Android versión Q (10)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
Notas:
- Su tema base para la aplicación/actividad debe ser
“Tema.AppCompat.DayNight”
como
<style name="DarkTheme" parent="Theme.AppCompat.DayNight">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
- Los nombres de su carpeta res terminarían con -night para que pueda configurar diferentes colores e imágenes para temas diurnos y nocturnos como
dibujable y dibujable-noche,
valores & valores-noche
-
A menos que me equivoque, creo que OP estaba buscando una forma de cambiar el modo nocturno en el dispositivo. Su código funciona perfectamente bien en cuanto a la aplicación. Mientras buscaba una forma de cambiar para todo el dispositivo,
UiManager
parece la clase adecuada para hacerlo.– Mackovich
24 de agosto de 2020 a las 15:49
-
¡Funciona perfectamente para mí!
– Marcos Delfos
11 de noviembre de 2020 a las 8:25
-
¡A mí también me funciona perfectamente!
– yoonhok
15 dic 2020 a las 23:20
Asegúrese de cambiar el tema predeterminado de Theme.AppCompat.Light.DarkActionBar
a Theme.AppCompat.DayNight.DarkActionBar
en el estilos.xml archivar y luego hacer AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
para cambiar al modo nocturno. Lo probé en APIv23 (Android 6.0) y superior y funciona bien. Para una mejor explicación ver este codelab de Android
-
Hola Neeraj Sewani. Estoy tratando de configurar una aplicación que simplemente cambie el valor del modo nocturno en todo el dispositivo. Estoy usando uiManager.setNightMode(UiModeManager.MODE_NIGHT_YES) o MODE_NIGHT_NO. Pero no soy capaz de conseguirlo. ¿También tengo que cambiar el “tema predeterminado” en mi aplicación? No me importa cómo se muestra mi aplicación. Solo quiero cambiar el modo Noche del dispositivo. Gracias.
– tonelada
19 de noviembre de 2020 a las 8:32
consolador
Este código funciona perfectamente para mí, aunque es posible que solo necesite reiniciar su aplicación. Pero tenga en cuenta que este código habilita el modo oscuro en todo el sistemano solo en la aplicación:
public static void setNightMode(Context target , boolean state){
UiModeManager uiManager = (UiModeManager) target.getSystemService(Context.UI_MODE_SERVICE);
if (VERSION.SDK_INT <= 22) {
uiManager.enableCarMode(0);
}
if (state) {
uiManager.setNightMode(UiModeManager.MODE_NIGHT_YES);
} else {
uiManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
}
}
Esto funcionó para mí en Kitkat.
DEVS bit a bit
Recuerda eso Dark Mode
no es Night Mode
. Son completamente diferentes. DM se introdujo en Android 10 que aplica el color blanco y negro incorporado, mientras que NM se lanzó en una versión anterior que usa un estilo predeterminado/personalizado comúnmente llamado como Calificadores de recursos. Si desea manejar su propio estilo personalizado de luz/noche y no confiar en el estilo oscuro integrado de Android, puede configurar forceDarkAllowed
a false
en themes.xml o style.xml para evitar conflictos.
Para cambiar el modo de su aplicación a la noche, use AppCompatDelegate.
// This will be the top level handling of theme
AppCompatDelegate.setDefaultNightMode(
if (userPrefModeIsNight)
AppCompatDelegate.MODE_NIGHT_YES
else
AppCompatDelegate.MODE_NIGHT_NO)
Una cosa más: su actividad debe extenderse desde AppCompatActivity.
Si extiende la actividad simple, llamar a AppCompatDelegate.setDefaultNightMode no funcionará.
Himanshu Yadav Anshu
int nightModeFlags =
getContext().getResources().getConfiguration().uiMode &
Configuration.UI_MODE_NIGHT_MASK;
switch (nightModeFlags) {
case Configuration.UI_MODE_NIGHT_YES:
doStuff();
break;
case Configuration.UI_MODE_NIGHT_NO:
doStuff();
break;
case Configuration.UI_MODE_NIGHT_UNDEFINED:
doStuff();
break;
}
Prokash Sarkar
Noctámbulo tiene su propia implementación para cambiar el modo día/noche en Android. Comenzar con NightOwl es muy fácil. Aquí hay un fragmento de código:
Inicie NightOwl en la clase de aplicación,
NightOwl.builder().defaultMode(0).create();
Llame a tres métodos en su clase de Actividad,
public class DemoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// step1 before super.onCreate
NightOwl.owlBeforeCreate(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
// step2 after setContentView
NightOwl.owlAfterCreate(this);
// write your code
}
@Override
protected void onResume() {
super.onResume();
// step3 onResume
NightOwl.owlResume(this);
}
}
Cambia la piel en todas partes como quieras,
View v = findViewById(R.id.button);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NightOwl.owlNewDress(SettingActivity.this);
}
});
-
Las bibliotecas de Google serán la mejor opción
– Vlad
28 de julio de 2020 a las 8:55
prueba esto stackoverflow.com/questions/31934503/…
– Munir
26 de noviembre de 2017 a las 11:34
Quiero cambiar el modo nocturno en todas partes, no en mi aplicación. No necesito cambiar algunos temas.
– Ilán
26 de noviembre de 2017 a las 11:44
¿Revisaste esta nota? “Nota: en API 22 y versiones anteriores, los cambios en el modo nocturno solo son efectivos cuando el modo de automóvil o escritorio está habilitado en un dispositivo. A partir de API 23, los cambios en el modo nocturno siempre son efectivos”.
– Google
29 de marzo de 2018 a las 6:00
¿Pudiste resolver este problema? Tengo problemas con setNightMode y no puedo obtenerlo en Android 10 u 11
– tonelada
19 de noviembre de 2020 a las 8:28