theme temas style studio para estilos ejemplos descargar creador android

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!