android - temas - Cambiar el tema de la actividad programáticamente
styles.xml android studio (3)
Como dicen los docs , debe llamar a setTheme
antes de cualquier salida de vista. Parece que super.onCreate()
participa en el procesamiento de la view
.
Por lo tanto, para alternar dinámicamente entre los temas, simplemente debe llamar a setTheme
antes de super.onCreate
esta manera:
public void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
En casos particulares, necesito eliminar el tema del diálogo de mi actividad, pero parece que no funciona. Aquí hay un ejemplo
Primera actividad:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startActivity(new Intent(MainActivity.this, SecondActivity.class));
}
Segunda actividad:
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setTheme(android.R.style.Theme);
setContentView(R.layout.activity_second);
}
Extracto manifiesto:
<activity android:name="SecondActivity" android:theme="@android:style/Theme.Dialog"></activity>
Cuando corro, sigue siendo un tema de diálogo.
API10
Gracias.
La respuesta de user1462299 funciona muy bien, pero si incluye fragmentos , utilizará el tema de actividades original. Para aplicar el tema a todos los fragmentos también puede anular el método getTheme () del contexto en su lugar:
@Override
public Resources.Theme getTheme() {
Resources.Theme theme = super.getTheme();
if(useAlternativeTheme){
theme.applyStyle(R.style.AlternativeTheme, true);
}
// you could also use a switch if you have many themes that could apply
return theme;
}
Ya no es necesario llamar a setTheme () en el método onCreate (). Está anulando todas las solicitudes para obtener el tema actual en este contexto de esta manera.
Sé que llego tarde, pero me gustaría publicar una solución aquí:
Compruebe el código fuente completo here .
Este es el código que utilicé cuando cambié el tema usando las preferencias.
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
String themeName = pref.getString("prefSyncFrequency3", "Theme1");
if (themeName.equals("Africa")) {
setTheme(R.style.AppTheme);
} else if (themeName.equals("Colorful Beach")) {
//Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
setTheme(R.style.beach);
} else if (themeName.equals("Abstract")) {
//Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
setTheme(R.style.abstract2);
} else if (themeName.equals("Default")) {
setTheme(R.style.defaulttheme);
}
Tenga en cuenta que debe colocar el código antes de establecer la vista de contenido.
¡CÓDIGO FELIZ!