Autore Topic: Come si potrebbe creare un impostazione che modifichi il tema della app?  (Letto 69 volte)

Offline FraCH

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei p9lite
  • Sistema operativo:
    Windows 10.8
Scusate ragazzi. Vorrei sapere come potrei implementare nella mia app un impostazione che possa cambiare tra il tema Material light e quello Dark. Grazie in anticipo.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Come si potrebbe creare un impostazione che modifichi il tema della app?
« Risposta #1 il: 16 Novembre 2016, 11:10:43 CET »
+2
Definisci i tuoi temi:

Codice (XML): [Seleziona]
<style name="MaterialLight" parent="@android:style/Theme.Material.Light">
  <!-- personalizzazione tema -->
</style>

<style name="MaterialDark" parent="@android:style/Theme.Material.Dark">
  <!-- personalizzazione tema -->
</style>

Nella onCreate delle Activity metti:

Codice (Java): [Seleziona]
@Override
public void onCreate(Bundle savedInstanceState) {

  SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
  if (pref.getInt("tema", 0)) {
    //Tema 0 = light
    setTheme(R.style.MaterialLight);
  } else {
    //Tema 1 = dark
    setTheme(R.style.MaterialDark);
  }

  //La super.onCreate va dopo
  super.onCreate(savedInstanceState);

  //Altre inizializzazioni
}

quando cambi tema dalle preferences devi riavviare l'activity, io lo faccio letteralmente terminandola e riavviandola:

Codice (Java): [Seleziona]
//Salvo la nuova impostazione
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = pref.edit();
edit.setInt("tema", nuovoTema);
edit.apply();

//Termino l'activity corrente
finish();

//Preparo un intent per riavviarla
Intent intent = new Intent(this, MiaActivity.class);
//Indico che l'attività va in primo piano e pulisco il backstack
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Riavvio l'activity
startActivity(intent);
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.