Cambiar el tema de la actividad de forma programática

En casos particulares necesito quitar el tema del diálogo de mi actividad pero no parece estar trabajando. Aquí está 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 todavía es un diálogo con temas.

API10

Gracias.

Como los docs dicen que usted tiene que llamar setTheme antes de cualquier salida de vista. Parece que super.onCreate() participa en el procesamiento de la view .

Por lo tanto, para cambiar de tema dinámicamente basta con llamar a setTheme antes de super.onCreate así:

 public void onCreate(Bundle savedInstanceState) { setTheme(android.R.style.Theme); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } 

Sé que estoy tarde pero me gustaría publicar una solución aquí:
Compruebe el código fuente completo aquí .
Este es el código que usé al cambiar el tema usando 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 poner el código antes de setcontentview.

¡CODIFICACIÓN FELIZ!

La respuesta de user1462299 funciona muy bien, pero si incluye fragmentos , usará el tema de las actividades originales. Para aplicar el tema a todos los fragmentos también se puede reemplazar 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; } 

No es necesario llamar a setTheme () en el método onCreate (). Usted está anulando cada solicitud para obtener el tema actual dentro de este contexto de esta manera.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.