Cambiar el tema en java no cambia el color de fondo

Estoy tratando de cambiar el tema en tiempo de ejecución con java-código, porque quiero que el usuario pueda cambiar el tema de la aplicación a través del menú de preferencias. Así, dejo al usuario el tema, y ​​luego leo los resultados como esto:

if (...) { getApplication().setTheme(R.style.BlackTheme); } else { getApplication().setTheme(R.style.LightTheme); } 

Por desgracia esto no funciona por alguna razón … el color de la fuente cambia ligeramente de gris oscuro (tema claro) a un gris más brillante (tema negro), pero el fondo siempre se mantiene blanco / negro (dependiendo del tema que se seleccionó inicialmente en el Archivo de manifiesto)

Si quite por completo el tema-entrada en el archivo de manifiesto, entonces su como si hubiera seleccionado el tema negro ….

…. hay algo que estoy pasando por alto?

Tuve el mismo problema y lo resolví de esta manera ..

 @Override public void onCreate(Bundle savedInstanceState) { if (getIntent().hasExtra("bundle") && savedInstanceState==null){ savedInstanceState = getIntent().getExtras().getBundle("bundle"); } //add code for theme switch(theme) { case LIGHT: setTheme(R.style.LightTheme); break; case BLACK: setTheme(R.style.BlackTheme); break; default: } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //code } 

Este código es para recrear el Paquete de ahorro de actividad y cambiar el tema. Usted tiene que escribir su propio onSaveInstanceState (Bundle outState); Desde API-11 puede utilizar el método recreate () en su lugar

 Bundle temp_bundle = new Bundle(); onSaveInstanceState(temp_bundle); Intent intent = new Intent(this, MainActivity.class); intent.putExtra("bundle", temp_bundle); startActivity(intent); finish(); 

No se puede configurar el tema de la aplicación en tiempo de ejecución. Si desea cambiar el tema en todas partes en su aplicación, debe llamar al

SetTheme (resId)

Como una primera cosa en la actividad onCreate ().

P.ej:

@Override public void onCreate (Paquete savedInstanceState) {setTheme (resId)}

Si desea cambiar el tema de las actividades ya iniciadas, debe volver a crearlas.

Se trata de un problema conocido: https://code.google.com/p/android/issues/detail?id=3793

Usted tiene que cambiar el color de fondo manualmente, setTheme() no lo cambiará.

  • Android: ¿Acabo de tener un disparo por propiedad mediante el uso de temas? ¿No hay nada como CSS en Android?
  • Tema que no se aplica a DialogFragment en Android
  • Temas de Android: Defina colores / degradados en "baseTheme.xml", use dentro de controles, reemplace en "subThemeX.xml"
  • ¿Por qué mi aplicación de Android no muestra el icono y el texto en ActionBar?
  • Cómo cambiar el tema de otro recurso de la aplicación en android?
  • app: el tema ahora está obsoleto
  • No se puede cambiar completamente el esquema de color del tema de Eclipse ADT
  • Android: Cómo cambiar los atributos del tema dinámicamente en tiempo de ejecución de código
  • Modificar el color de un androide drawable
  • Tema de DatePickerDialog de Android 6.0
  • PreferenciaLa actividad y el tema no se aplican
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.