Sto tentando di mostrare una finestra di dialogo da PreferenceActivity, che è impostata su Theme.Light. La finestra di dialogo mostra con testo scuro su uno sfondo scuro:Android: problema con la visualizzazione della finestra di dialogo dall'attività Theme.Light
suppongo che utilizza il testo scura perché eredita il colore del testo dall'attività genitore, o qualcosa di simile. Vorrei che la finestra di dialogo utilizzasse il testo bianco sullo sfondo scuro o usasse uno sfondo bianco con testo scuro, come fa PreferenceActivity se impostato su Theme.Light.
Questo sembra essere un problema noto, i rimedi che ho trovato comportano la creazione e l'utilizzo di uno stile personalizzato che estende Theme.Dialog e utilizzandolo per istanziare la finestra di dialogo. Qualcosa di simile:
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:textColor">?android:attr/textColorPrimaryInverseDisableOnly</item>
</style>
Dialog dialog = new Dialog(context, R.style.CustomDialog);
Ho provato questo, ma non ha fatto alcuna differenza. Ho anche provato un numero di valori diversi per textColor, nessuno dei quali ha modificato il colore del testo della finestra di dialogo. Come un controllo di integrità, ho aggiunto:
<item name="android:background">#FFFF0000</item>
allo stile, che ha portato in una finestra con uno sfondo rosso (quindi sono sicuro che sto istanziare la finestra di dialogo correttamente).
Il più vicino possibile a una soluzione è semplicemente impostare il colore di sfondo della finestra di dialogo su bianco, che fornisce la seguente finestra di dialogo. Ma questa non è una buona soluzione, perché alcuni versione o qualche dispositivo potrebbe non utilizzare lo stesso comportamento che sto vedendo quando invertendo il colore del testo:
Quindi, c'è un buon modo per impostare il colore del testo su un finestra di dialogo visualizzata da un'attività Theme.Light?
Mi sembra di ricordare di lottare con qualcosa di simile. Non l'ho mai fatto funzionare. La mia soluzione alternativa era quella di avere risorse a valore multiplo, una che definiva i colori come scuri per Gingerbread, cioè in res/values-v8 e come luce in res/values. –
La mia tentazione è di hardcode lo sfondo della lista in bianco, e il colore del testo della lista in nero. Nella speranza che ciò garantisca il testo nero su sfondo bianco, indipendentemente dal dispositivo o dalla versione. – ab11
Beh sì, funzionerebbe sicuramente. Ma ho pensato che il punto di questo dolore fosse quello di fondersi con il tema del dispositivo ...Il pan di zenzero era molto più scuro delle versioni precedenti, quindi è il caso speciale. –