2012-10-06 24 views
5

tengo algunas dificultades con la creación de un "conmutador tema" mediante programación. me gustaría cambiar temas de aplicación (entre White (Theme.Light.NoTitleBar) y Dark (Theme.Black.NoTitleBar)) y lo que hago es: fijo una SharedPreference:cambiar el tema no funciona en <4,0 como debe

final String PREFS_NAME = "MyPrefsFile"; 
    final SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    final SharedPreferences.Editor editor = settings.edit(); 

y que tengo dos botones para cambiar temas (segundo uno es casi idéntica)

Button ThemeWhite = (Button) findViewById(R.id.ThemeWhite); 
    ThemeWhite.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      editor.putBoolean("Theme", false); 
       editor.commit(); 
       System.exit(2); 
     } 
    }); 

y en mendicidad de cada actividad I comprobar SharedPreference

boolean theme = settings.getBoolean("Theme", false); 
    if(theme){ 
     this.setTheme(R.style.Theme_NoBarBlack); 
    } else{ 
     this.setTheme(R.style.Theme_NoBar); 
    } 

    setContentView(R.layout.aplikacja); 

defino temas en el archivo styles.xml en los valores de carpetas:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.Light.NoTitleBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.NoTitleBar" /> 

en los valores-v11:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.Holo.Light.NoActionBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.Holo.NoActionBar" /> 

en los valores-v14:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.DeviceDefault.NoActionBar" /> 

archivo de manifiesto:

<application 
... 
     android:theme="@style/Theme.NoBar" > 

Todo está funcionando excelente en android> 4,0 pero cuando se utiliza 2.2 no cambia el tema - sólo la fuente está recibiendo blanca como debe ser, pero no es sin fondo oscuro

He intentado comprobar si al menos funciona y ha cambiado Theme.NoBarBlack en los valores (para android < 3.0) y su valor es el mismo que Theme.NoBar y luego, cuando presioné el botón, la fuente no cambió, como debería ser .

EDITAR (problema detectado): Así que después de haberlo probado resultar que en Android 2.2 El archivo de manifiesto establecer Antecedentes y descanso, y mediante programación cambiar el tema afecta solamente el color del texto. alguna idea de por qué sucede eso?

RESPUESTA (como no tengo 10 reputación): en Android 3.0 < Importa si

super.onCreate(savedInstanceState); 

es antes de la creación de tema o no.

lo que debe ser:

public void onCreate(Bundle savedInstanceState) { 
    setTheme(R.style.Theme_NoBar); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lista); 
} 

siento chicos para hacer un problema de la nada, pero ya que estaba trabajando en> 3,0 que estaba confundido. Pasa la mitad del día pero trabajando. :)

Respuesta

3

Hay un error en su styles.xml: para Theme.NoBarBlack, establece el elemento principal en @android:style/Theme.NoActionBar, pero no existe.

Creo que quieres decir @android:style:Theme.NoTitleBar.

+0

Gracias, pero ese error que cometí cuando estaba experimentando con el cambio de temas, etc. y que olvidé de volver a cambiarlo y copiarlo y pegarlo aquí. Entonces, algo más debe causar este extraño comportamiento. –

+0

Buena suposición, pero Theme.NoTitleBar no existe en ese nivel de API. Tiene que ser Theme.Black.NoTitleBar –

+0

@StephanBranczyk [Android Documentation] (http://developer.android.com/reference/android/R.style.html#Theme_NoTitleBar) dice que 'Theme.NoTitleBar' existe desde el nivel de la API 1. – Kyriog

Cuestiones relacionadas