2011-09-09 18 views
5

Sto creando un'app da utilizzare dai piloti. Principalmente utilizza TextView, EditText, Button, ecc. In altre parole, non è molto grafica.Voglio creare una "modalità notte" rossa per la mia app per Android

Se utilizzato di notte, mi piacerebbe che l'utente fosse in grado di passare a una "modalità notte" in cui tutto sullo schermo è rosso e nero ... come l'app Google Sky Map. (Questo è importante per i piloti perché il colore rosso non distrugge l'adattamento naturale della visione notturna degli occhi come fanno altri colori.)

Qual è il modo migliore per farlo? Ho trovato API come ColorFilter, ecc., Ma non sono sicuro di come applicherei queste app.

+2

è possibile fornire un layout o risorse diversi per la modalità notte. http://developer.android.com/guide/topics/resources/providing-resources.html Ad esempio: crea un layout di cartella-notte – PH7

+0

Hai provato a sovrapporre un SurfaceView e dipingere il Canvas trasparente in modalità normale. Usa Paint con ColorFilter per la tua modalità notturna. –

+0

Questo genere di cose è utile anche agli astrofili, per lo stesso motivo (visione notturna) – Roboprog

risposta

2

Se stai semplicemente cambiando i colori delle varie viste all'interno del layout e non la struttura stessa del layout, ti suggerisco di farlo semplicemente usando gli stili.

Definizione di due serie di stili per le varie viste che costituiscono il layout: un set per la modalità notturna e una per la modalità giorno. Nella tua attività, diventa quindi un caso di chiamare setStyle() su ciascuna delle tue visualizzazioni per alternarla tra notte e giorno.

Venire con una convenzione di denominazione ragionevole e schema di parentela per i tuoi stili renderà la tua vita molto più facile. per esempio. MyText.Large vs MyText.Large.Night.

Il Android developer doc on Themes and Style è un buon punto di partenza.

1

Creare un tema giorno e notte e impostarlo a livello di codice funzionerebbe. Ma richiede anche di duplicare i tuoi stili, solo per specificare diversi drawable/colori.

Invece, è possibile mantenere uno stile e utilizzare il supporto della modalità giorno/notte integrato di Android. Così come è possibile avere più varianti di un singolo layout (per orientamento orizzontale o verticale, disegnabile) (per densità di pixel differenti) e stringa (per diverse impostazioni locali), è anche possibile avere versioni giorno e notte dei disegni e dei colori. Gli specificatori sono "-night" e "-notnight", ma probabilmente vorrai usare "-night" o nulla, rendendo la tua versione diurna l'impostazione predefinita. Per esempio:

res/drawable/fancy-button-background.9.png 
res/drawable-night/fancy-button-background.9.png 

Android dovrebbe essere in grado di cambiare la modalità giorno/notte automatica, ma i dettagli su come e quando ciò accade sono un po 'poco chiaro per me. Per cambiare la modalità da soli, è possibile utilizzare UiModeManager#setNightMode(). Assicurati solo che la modalità auto sia abilitata per prima, usando enableCarMode(0).

Problemi correlati