2012-07-10 23 views
9

Duplicar posibles:
How to change current Theme at runtime in Androidcambio y aplicar tema en tiempo de ejecución en Android

que tienen una aplicación para Android en la que permiten a los usuarios cambiar entre temas en tiempo de ejecución. Cambiar de tema es fácil, pero the theme isn't applied until the activity is recreated. Encontré una forma de apply the theme to current activity pero si el usuario presiona el botón Atrás, las pantallas anteriores aún tienen el tema anterior. ¿Cómo puedo cambiar el tema para esas actividades? Ejemplo de aplicación que lo soporte: Tasks Free

Respuesta

4

Sólo una pista supongo:

Antes finish(); llamada

setResult(AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme); 

Ahora en todas sus actividades, implementar onActivityResult

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

Otra solución (mejor):

implementar una clase que salva el 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; 
    } 
} 

Ahora vamos todos ur actividades amplían esta 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

hola sherif, quería saber si hay alguna solución donde obtengo el código de color de la web y puedo cambiar el color de todos los botones de tiempo de ejecución sin ir a todos los botones en particular y aplicar color BackGround, podría haber ¿Alguna solución usando tema o estilo? Por favor comparte cualquier sugerencia que tengas. – MKJParekh

+0

¿Tienes colores infinitos? o solo un conjunto limitado de colores? –

+0

Tengo 20 colores limitados, por ejemplo, pero esos 20 se descargan del servidor por lo que pueden variar de una vez a otra, en colores cortos son alrededor de 15-20 (no son correctos) y esos códigos de color tampoco son correctos. Uno de los usuarios ha sugerido utilizar CustomViews http://stackoverflow.com/questions/22529646/android-app-apply-color-theme-dynamically-at-runtime – MKJParekh

5

dinámicamente en tiempo de ejecución, lo llaman setTheme() en onCreate de su actividad() método , antes de llamar a setContentView(). Para cambiar el tema, simplemente necesita reiniciar su actividad.

favor ver this file..!

también quieren ver this y this ... Espero que esto ayude ...!

+1

Reiniciar la actividad funciona para el actual pero cuando el usuario hace clic atrás botón actividades anteriores todavía tienen un viejo tema. Esto se debe a que no se llama a onCreate cuando el usuario regresa, así que no puedo configurar el tema. – Giorgi

+0

¿Quieres establecer el tema permanente y luego el mismo como fondo de pantalla en vivo hacer una aplicación y luego en la configuración puede agregar un estilo diferente ..! @Giorgi –

+3

Esto no responde la pregunta. La actividad de reinicio funciona para la que se muestra actualmente, pero ¿cómo la aplico a otras actividades cuando el usuario hace clic atrás? – Giorgi

Cuestiones relacionadas