Estoy tratando de obtener un tema elegido por el usuario y siento que estoy frustrantemente cerca. Definir el tema en AndroidManifest.xml
funciona como debería, pero (lo mejor que puedo decir) no se puede cambiar en función de las preferencias de aplicaciones:¿Cambia el tema de la aplicación programáticamente?
<application
android:theme="@style/theme_sunshine"
android:icon="@drawable/icon"
android:label="@string/app_name">
Alternativamente, la configuración de forma dinámica en cada actividad también funciona:
someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight");
setTheme(someOtherChosenTheme);
Pero eso parece complicado, y prefiero configurar el tema para toda la aplicación en un solo lugar. Mi primer pensamiento fue para agarrar el contexto de aplicación tan pronto como mis principales lanzamientos de actividad y hacerlo allí:
getApplicationContext().setTheme(R.style.theme_dummy);
Como mejor que puedo decir, this debe hacer el truco, pero en realidad no lo está haciendo nada - la toda la aplicación tiene el estilo predeterminado de Android. ¿Es válido lo anterior, y si es así, podría estar haciendo otra cosa tonta?
Estoy trabajando en API nivel 3 si eso es importante. ¡Prods en la dirección correcta muy apreciados!
Esto es esencialmente lo que estoy haciendo. Todavía no es ideal, ya que no hay herencia múltiple, p. para una actividad de lista personalizada, pero el inconveniente es menor. Tutorial muy útil, aunque ya lo leí :) – Cheezmeister
Tengo una BaseListActivity y una actividad base (genérica) en cada aplicación que realizo. BaseListActivity tiene un manejo común de CRUD (lectura, adición, edición, eliminación) integrado, por lo que es muy fácil crear una nueva actividad de lista y simplemente anular algunos métodos. Por supuesto, si agrego un MapActivity o TabActivity, tendré que crear una BaseXActivity para ellos también. A veces, la herencia múltiple es simplemente mejor :) – peter3
Entonces, ¿agregar setTheme para cada actividad, antes de que se llame a "setContentView" es realmente la solución correcta? ¿No hay una sola solución de todo el sistema? Además, ¿qué ocurre con todas las actividades que ya están activas? –