2012-07-10 6 views
9

Eventuali duplicati:
How to change current Theme at runtime in Androidcambiamento e applicare tema in fase di esecuzione in Android

Ho un'applicazione Android in cui mi permetto agli utenti di passare tra i temi in fase di esecuzione. La commutazione di un tema è semplice ma the theme isn't applied until the activity is recreated. ho trovato un modo per apply the theme to current activity ma se l'utente preme il pulsante indietro gli schermi precedenti hanno ancora il vecchio tema. Come posso cambiare tema per quelle attività? Esempio di applicazione che lo sostiene: Tasks Free

risposta

4

Solo un suggerimento suppongo:

Prima finish(); chiamata

setResult(AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme); 

Ora, in tutte le vostre attività, attuare onActivityResult

protected void onActivityResult(int request, int result, Intent data) { 
    if(result == AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme) 
    { 
     //update the current theme 
    } 
} 

Un'altra soluzione (migliore):

implementare una classe che salva il tema:

public class CurrentThemeHolder { 
    private CurrentThemeHolder() { 
    } 
    private static instance; 
    public static getInstance() { 
     if(instance == null) 
      return new CurrentThemeHolder(); 
     else 
      return instance; 
    } 
    private int mTheme; //identifier of the theme 
    public getTheme() { 
     return mTheme; 
    } 
    public setTheme(int newTheme){ 
     mTheme = newTheme; 
    } 
} 

Ora tutti ur attività estendere questo ThemeActivity:

public class ThemeActivity extends Activity { 
    private int mTheme; 
    protected void onResume() { 
     if(mTheme != CurrentThemeHolder.getInstance().getTheme()) { 
      //do what you should do to set the theme 
      mTheme = CurrentThemeHolder.getInstance().getTheme(); 
      //everytime you set the theme save it 
      //this maybe should be done in onCreate() 
     } 
    } 
} 
+0

ciao sherif, volevo sapere da te se poteva esserci qualche soluzione in cui ottengo il codice colore dal web e secondo posso cambiare il colore di tutti i miei pulsanti runtime senza andare a tutti i pulsanti particolari e applicare il colore BackGround, potrebbe esserci qualsiasi soluzione con tema o stile? Si prega di condividere qualsiasi suggerimento che avete. – MKJParekh

+0

Hai colori infiniti? o solo un numero limitato di colori? –

+0

Ho 20 colori limitati per dire, ma quelli 20 vengono scaricati dal server in modo che possano variare da una volta all'altra, in colori corti sono circa 15-20 (non risolti) e anche quei codici colore non sono fissi. Uno degli utenti ha suggerito di utilizzare CustomViews http://stackoverflow.com/questions/22529646/android-app-apply-color-theme-dynamically-at-runtime – MKJParekh

5

dinamicamente in fase di esecuzione, chiamare setTheme() in onCreate della vostra attività (metodo) , prima di chiamare setContentView(). Per cambiare il tema, devi semplicemente riavviare la tua attività.

Si prega di vedere this file..!

vogliono anche vedere this e this ... Spero che questo aiuti ...!

+1

Il riavvio dell'attività funziona per quello corrente ma quando l'utente fa clic indietro pulsante attività precedenti hanno ancora vecchio tema. Questo perché onCreate non viene chiamato quando l'utente torna indietro quindi non posso impostare il tema. – Giorgi

+0

Vuoi impostare il tema permanente quindi lo stesso come lo sfondo animato crea un'app quindi, nell'impostazione, puoi aggiungere uno stile diverso ..! @Giorgi –

+3

Questo non risponde alla domanda. L'attività di riavvio funziona per quella attualmente visualizzata, ma come faccio ad applicarla ad altre attività quando l'utente fa clic indietro? – Giorgi