2016-02-26 3 views

risposta

7

Come specificato nel that same 23.2 blog post,

Per impostazione predefinita, se si tratta di 'notte' corrisponderà al valore di sistema (da UiModeManager.getNightMode())

Tuttavia, fin d'ora, Questo significa che è equivalente a MODE_NIGHT_NO poiché l'unica cosa che attiva la modalità notturna sono i dock per auto dell'era Gingerbread.

Ciò significa che sui dispositivi attuali, l'unico modo per vedere un tema scuro quando si utilizza un tema DayNight è quello di utilizzare NIGHT_MODE_YES o NIGHT_MODE_AUTO

Come indicato in entrambe le ufficiali a posteriori e Chris Banes' post on DayNight, è possibile modificare la modalità a livello globale o locale.

Il livello globale si basa sul metodo statico AppCompatDelegate.setDefaultNightMode(), che imposta la modalità DayNight sull'intera app. Poiché ciò si applica solo mentre il tuo processo è attivo (cioè, è solo un flag in memoria), devi assicurarti di impostarlo ogni volta che la tua applicazione viene avviata. Un approccio raccomandato dal post di Chris' per farlo è quello di impostare in un metodo statico della classe applicazione personalizzata:

static { 
    AppCompatDelegate.setDefaultNightMode(
     AppCompatDelegate.MODE_NIGHT_...); 
} 
public class MyApplication extends Application { 

Se, invece, si vuole solo cambiare la modalità per una singola attività/finestra di dialogo, è può invece chiamare getDelegate().setLocalNightMode():

public class MyActivity extends AppCompatActivity { 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState == null) { 
     // Set the local night mode to some value 
     getDelegate().setLocalNightMode(
       AppCompatDelegate.MODE_NIGHT_...); 
     // Now recreate for it to take effect 
     recreate(); 
    } 
    } 
} 

Questo cambia solo la singola istanza - si noterà la chiamata a recreate() - Visualizzazioni già gonfiati non saranno interessati da un cambiamento nella modalità notte, in modo da poter forzare l'attività da ricreare per ottenere i valori aggiornati.

Naturalmente, dopo Chris' afferma anche

Ricordo inoltre che il valore predefinito è MODE_NIGHT_FOLLOW_SYSTEM, quindi se si aggiunge un ambiente user-visibile alla piattaforma in futuro, AppCompat verrà automaticamente usarlo.

+0

Per modificare altri attributi quando è giorno o notte, controlla [questa risposta] (http://stackoverflow.com/a/35629740/1676363) che spiega come usare la cartella delle risorse 'night' e' notnight' S. – ianhanniballake

3

Sembra che ci sia un bug in Android Lollipop con AppCompat 23.2.0: Google Issue Tracker

Il seguente codice funziona solo pre-Lollipop:

public class MyApplication extends Application { 
    static { 
    AppCompatDelegate.setDefaultNightMode(
     AppCompatDelegate.MODE_NIGHT_YES); 
    } 
    [...] 
}