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. :)
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. –
Buena suposición, pero Theme.NoTitleBar no existe en ese nivel de API. Tiene que ser Theme.Black.NoTitleBar –
@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