Wie aktiviere ich den Nachtmodus programmgesteuert?

Lesezeit: 5 Minuten

Ilans Benutzeravatar
Ilan

Ich suche nach einer Möglichkeit, den Nachtmodus programmgesteuert mit einem Android-Code zu aktivieren:

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);
    }
}

An meinem Bildschirm hat sich nichts geändert, der Nachtmodus ist immer noch deaktiviert. Demzufolge Verknüpfung

CarMode oder DeskMode müssen nicht aktiviert werden. Ich habe den folgenden Logcat auf 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

  • versuchen Sie dies stackoverflow.com/questions/31934503/…

    – Munir

    26. November 2017 um 11:34 Uhr

  • Ich möchte den Nachtmodus überall ändern, nicht in meiner App. Ich muss einige Themen nicht wechseln.

    – Ilan

    26. November 2017 um 11:44 Uhr

  • Haben Sie diesen Hinweis überprüft? „Hinweis: Bei API 22 und darunter sind Änderungen am Nachtmodus nur wirksam, wenn der Auto- oder Schreibtischmodus auf einem Gerät aktiviert ist. Ab API 23 sind Änderungen am Nachtmodus immer wirksam.“

    – Google

    29. März 2018 um 6:00 Uhr

  • Konntest du dieses Problem lösen? Ich habe Probleme mit setNightMode und kann es nicht auf Android 10 oder 11 bekommen

    – Tonne

    19. November 2020 um 8:28 Uhr

Benutzeravatar von Kishan Solanki
Kischan Solanki

EINFACHSTE LÖSUNG

Sie können das dunkle Thema der Anwendung einfach aktivieren / deaktivieren, indem Sie:

  1. dunkles Thema aktivieren:

     AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    
  2. Dunkles Design zwangsweise deaktivieren:

     AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    
  3. Legen Sie das App-Design basierend auf den mobilen Einstellungen des Dunkelmodus fest, dh wenn der Dunkelmodus aktiviert ist, wird das Design auf ein dunkles Design eingestellt, wenn nicht, dann auf das Standarddesign, aber dies funktioniert nur in Version >= Android-Version Q (10)

     AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
    

Anmerkungen:

  1. Ihr Basisthema für App/Aktivität sollte sein

“Theme.AppCompat.DayNight”

wie

<style name="DarkTheme" parent="Theme.AppCompat.DayNight">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
  1. Die Namen Ihres Res-Ordners enden mit -night, sodass Sie verschiedene Farben und Bilder für Tag- und Nachtthemen festlegen können

ziehbar & ziehbar-Nacht,
Werte & Werte-Nacht

  • Wenn ich mich nicht irre, glaube ich, dass OP nach einer Möglichkeit gesucht hat, den Nachtmodus geräteweise zu ändern. Ihr Code funktioniert in Bezug auf die App einwandfrei. Da ich nach einer Möglichkeit suchte, das gesamte Gerät zu ändern, UiManager scheint die richtige Klasse dafür zu sein.

    – Mackovich

    24. August 2020 um 15:49 Uhr

  • Funktioniert perfekt für mich!

    – Markus Delphi

    11. November 2020 um 8:25 Uhr

  • Funktioniert bei mir auch einwandfrei!

    – Yoonhok

    15. Dezember 2020 um 23:20 Uhr

Stellen Sie sicher, dass Sie das Standarddesign von ändern Theme.AppCompat.Light.DarkActionBar Zu Theme.AppCompat.DayNight.DarkActionBar im styles.xml Datei und dann tun AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) um in den Nachtmodus zu wechseln. Ich habe es in APIv23 (Android 6.0) und höher getestet und es funktioniert gut. Zur besseren Erklärung siehe dieses Codelab von Android

  • Hallo Neeraj Sewani. Ich versuche, eine App einzustellen, die einfach den Wert des Nachtmodus im gesamten Gerät umschaltet. Ich verwende uiManager.setNightMode(UiModeManager.MODE_NIGHT_YES) oder MODE_NIGHT_NO. Aber ich bin nicht in der Lage, es zu bekommen. Muss ich auch das „Default-Theme“ in meiner App ändern? Es ist mir egal, wie meine App angezeigt wird. Ich möchte nur den Nachtmodus des Geräts ändern. Danke.

    – Tonne

    19. November 2020 um 8:32 Uhr

Benutzeravatar von DiLDoST
DiLDoST

Dieser Code funktioniert perfekt für mich, obwohl Sie möglicherweise nur Ihre App neu starten müssen. Aber denken Sie daran, dass dieser Code aktiviert den Dark Mode systemweitnicht nur in der App:

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);
    }
}

Das hat bei mir in Kitkat funktioniert.

Benutzeravatar von Bitwise DEVS
Bitweise DEVS

Erinnere dich daran Dark Mode ist nicht Night Mode. Sie sind völlig unterschiedlich. DM wurde in Android 10 eingeführt, das die integrierte Schwarz-Weiß-Farbe erzwingt, während NM in einer früheren Version veröffentlicht wurde, die entweder den standardmäßigen oder benutzerdefinierten Stil verwendet, der allgemein als bezeichnet wird Ressourcenqualifizierer. Wenn Sie Ihren eigenen benutzerdefinierten Licht-/Nachtstil verwenden möchten und sich nicht auf den integrierten dunklen Stil von Android verlassen möchten, sollten Sie dies festlegen forceDarkAllowed Zu false in themes.xml oder style.xml, um Konflikte zu vermeiden.

Um Ihren App-Modus auf Nacht zu ändern, verwenden Sie AppCompatDelegate.

// This will be the top level handling of theme
        AppCompatDelegate.setDefaultNightMode(
            if (userPrefModeIsNight)
                AppCompatDelegate.MODE_NIGHT_YES
            else
                AppCompatDelegate.MODE_NIGHT_NO)

Eine weitere Sache: Ihre Aktivität muss von AppCompatActivity erweitert werden.

Wenn es die einfache Aktivität erweitert, funktioniert das Aufrufen von AppCompatDelegate.setDefaultNightMode nicht.

Benutzeravatar von Himanshu Yadav Anshu
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;
}

Benutzeravatar von Prokash Sarkar
Prokash Sarkar

Nachteule hat eine eigene Implementierung zum Umschalten des Tag-/Nachtmodus auf Android. Der Einstieg in NightOwl ist super einfach. Hier ist ein Code-Snippet:

Init der Nachteule in der Anwendungsklasse,

NightOwl.builder().defaultMode(0).create();

Rufen Sie drei Methoden in Ihrer Activity-Klasse auf,

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);
    }

}

Wechseln Sie die Haut überall, wie Sie möchten,

View v = findViewById(R.id.button);
v.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        NightOwl.owlNewDress(SettingActivity.this);
    }
});

  • Google-Bibliotheken sind die beste Wahl

    – Vlad

    28. Juli 2020 um 8:55 Uhr

1448730cookie-checkWie aktiviere ich den Nachtmodus programmgesteuert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy