2

Wenn der Nachtmodus eingeschaltet ist, möchte ich ein anderes Layout in meiner Aktivität auswählen.Nachtmodus-Status nicht in der App erkannt - selbst wenn eingeschaltet

Was ich getan habe:

eigenen Layout-Ordner für night und notnight wie folgt hinzugefügt:

res 
-----layout-night 
----------my_layout.xml 

-----layout-notnight 
----------my_layout.xml 

Nun, wenn ich Nachtmodus umschalten und die App wieder öffnen, ich wurde das Layout der Hoffnung, würde ich ändern aber das tut es nicht.

Gibt es etwas extra dafür?

Gibt es eine Erlaubnis, die ich hinzufügen muss, damit das funktioniert? Wenn ja, welche?

Nicht auf der Suche nach einem alternativen Ansatz. Mein Anwendungsfall benötigt speziell ein Layout, das basierend auf dem Status des Nachtmodus ausgewählt wird. Ich versuche herauszufinden, warum das richtige Layout nicht automatisch ausgewählt wird, wenn die Ordner vorhanden sind.


UPDATE: eingrenzen Problem. Das Layout layout-notnight wird immer ausgewählt. Daher funktioniert die Ordnerstruktur gut. Die App kann den Nachtmodus nicht erkennen. (Nachtmodus wird auf der Gerät- diese Option aktiviert ist versucht, Makeln und Ausschalten es auf dem Gerät funktioniert, aber app erkennen gewohnt)

So Frage ist nun:

Ist eine Erlaubnis erforderlich für sie in der Lage, den Zustand zu erfassen, Nacht-Modus? wie es für die Erkennung von WLAN-Status und Netzwerkstatus benötigt.

+0

Können Sie sie nicht im selben Ordner ablegen und sie einfach mit "Tag" und "Nacht" suffixen und dann in "onCreate" 'setContentView' verwenden, um den passenden Ordner auszuwählen? – Vucko

+0

Nein, ich weiß, ich kann es so machen. Aber das ist nicht mein Anwendungsfall. Die primäre Absicht besteht darin, das Layout basierend auf dem Status des Nachtmodus zu ändern. – AndroidMechanic

+0

Ah ok, tut mir leid. Mir ist klar, was du zu tun versuchst - etwas, das dem ähnlich ist, was android mit 'mdpi',' hdpi', 'xhdpi' usw. macht. Vielleicht kannst du herausfinden, wie das gemacht wird, und versuchen, das nachzuahmen? – Vucko

Antwort

0

Sie könnten versuchen, UiModeManager zu verwenden. Es bietet Methoden setNightMode() und getNightMode(). Vielleicht löst es das Problem nicht, aber das ist der Weg, es zu tun.

+0

Danke für die Antwort. Dass ich weiß. Aber ich versuche grundsätzlich herauszufinden, warum das richtige Layout nicht automatisch aufgenommen wird. – AndroidMechanic

+0

Haben Sie versucht, 'UiModeManager.setNightMode (MODE_NIGHT_AUTO)' in Ihrem Code zu verwenden? –

+0

Ich bin auf Cyanogenmod 13. Ich kann es von schnellen Einstellungen wechseln. – AndroidMechanic

0

The documentation sagt:

Auf API 22 und unten, Änderungen in den Nachtmodus nur dann wirksam sind, wenn das Auto oder Schreibtisch-Modus auf einem Gerät aktiviert ist. Ab API 23 sind Änderungen im Nachtmodus immer wirksam.

MODE_NIGHT_AUTO automatisch zwischen Nacht schaltet und notnight basierend auf den aktuellen Standort des Geräts und bestimmte andere Sensoren

Und von here (man beachte die BOLD Text):

Dies kann sich während der Lebensdauer Ihrer Anwendung ändern, wenn der Nachtmodus in der automatischen Mod. Bleibt e (Standard), in diesem Fall ändert sich der Modus basierend auf der Tageszeit.

Sie können also versuchen, die Gerätezeit auf einen geeigneten Wert einzustellen.

Aber bitte beachten Sie auch, dass die Nachtmoduserkennung auch von anderen bestimmten Sensoren abhängen kann (was die Entwicklerwebsite nicht klar sagt). Schätze, der Lichtsensor könnte in Betracht gezogen werden.

+0

Ich bin auf API Level 23 und habe alle Einstellungen versucht - sowohl Auto als auch Nacht explizit. App wird einfach nicht erkennen. Von welchen anderen Faktoren hängt die Erkennung ab? – AndroidMechanic

+0

Einige bestimmte Sensoren, aber das Dokument gibt nicht an, welchen Sensor es verwenden wird – suitianshi

+0

aber wissen Sie welche Sensoren? Gibt es eine externe Quelle/Referenz für diese Information? – AndroidMechanic

0

Wenn Sie eine Umschaltfläche oder ein Kontrollkästchen verwenden, können Sie einen booleschen Wert in SharedPreferences speichern und damit überprüfen, ob der Benutzer den Nachtmodus möchte oder nicht. Dies funktioniert auch, nachdem die App geschlossen und erneut verwendet wurde.

CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox); 
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     SharedPreferences sharedPreferences = getSharedPreferences("MyData", MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      editor.putBoolean("dark", isChecked); 
      editor.commit(); 
     } 
    }); 

Dann wird in der nächsten Aktivität

SharedPreferences preferences = getSharedPreferences("MyData", Context.MODE_PRIVATE); 
    listView = (ListView) findViewById(R.id.listView); 
    ArrayAdapter<String> adapter; 
    if(preferences.getBoolean("dark",false) == true) 
     adapter = new ArrayAdapter<String>(this,R.layout.list_item_dark,name); 
    else 
     adapter = new ArrayAdapter<String>(this,R.layout.list_item,name); 

Ebenso können Sie das Layout mit dieser Methode ändern.

+0

Danke für die Antwort, aber ein Workaround s nicht was ich suche. Ich weiß, wie ich Umgehungen bekomme.Die Antwort, die ich suche, ist, wenn der Nachtmodus auf Geräteebene aktiviert ist, warum wird die App das nicht erkennen ... – AndroidMechanic

Verwandte Themen