Sto tentando di ottenere un tema scelto dall'utente e mi sento come se fossi frustrante vicino. Definire il tema in AndroidManifest.xml
funziona come dovrebbe, ma (come meglio posso dire) non possono cambiare in base alle preferenze app:Passaggio a livello di applicazione a livello di programma in modo programmatico?
<application
android:theme="@style/theme_sunshine"
android:icon="@drawable/icon"
android:label="@string/app_name">
In alternativa, impostandola in modo dinamico in ogni attività funziona anche:
someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight");
setTheme(someOtherChosenTheme);
Ma quello sembra disordinato, e preferirei impostare il tema per l'intera app in un unico posto. Il mio primo pensiero è stato quello di afferrare il contesto dell'applicazione non appena i miei principali lanci di attività e di farlo lì:
getApplicationContext().setTheme(R.style.theme_dummy);
Come meglio posso dire, this dovrebbe fare il trucco, ma in realtà non sta facendo nulla - il l'intera app ha lo stile Android predefinito. È valido quanto sopra, e se sì, potrei fare qualcosa di altrimenti stupido?
Sto lavorando al livello API 3 se questo è importante. I prodotti nella giusta direzione sono molto apprezzati!
Questo è in sostanza quello che sto facendo. Non è ancora l'ideale, poiché non esiste un'eredità multipla, ad es. per una ListActivity personalizzata, ma l'inconveniente è minore. Tutorial molto utile, anche se l'ho già letto :) – Cheezmeister
Ho in pratica una BaseListActivity e un'attività Base (Generic) in ogni app che faccio. BaseListActivity ha una gestione comune di CRUD (leggi, aggiungi, modifica, elimina) integrato, quindi è molto facile creare una nuova attività di lista e sovrascrivere solo alcuni metodi. Ovviamente, se aggiungo MapActivity o TabActivity, dovrei creare anche BaseXActivity per loro. A volte l'eredità multipla è solo meglio :) – peter3
Quindi aggiungere setTheme per ogni attività, prima che venga chiamato "setContentView" è davvero la soluzione corretta? non c'è una soluzione a livello di sistema singolo? inoltre, cosa succede con tutte le attività che sono già in vita? –