2010-08-31 14 views
16

Quiero tener una función de "cambiar el tema" en mi aplicación. Si invoco setTheme() en onCreate(), hay un problema.Implementar la función de cambio de tema negro/claro en la aplicación de Android

El momento después de que inicie mi aplicación, aparece un fondo blanco liso por un segundo (porque he establecido un tema claro en el manifiesto). Después de eso, se muestra el diseño completo de mi actividad, ya sea con fondo blanco o negro, según la preferencia de tema del usuario.

¿Hay alguna manera de que pueda cambiar si aparece el fondo blanco o negro después del lanzamiento?

+0

¿La aplicación está llamando al tema o a la actividad de on create? No lo sé sin ningún código, pero parece que no se puso en la etiqueta de la aplicación. – Bactos

+0

El tema se establece en el manifiesto. Pero incluso si no lo configuro manualmente en el manifiesto, usa el tema predeterminado. Establecer el tema predeterminado en manifiesto es equivalente sin configurar ningún tema en el manifiesto. – fhucho

Respuesta

9

Asegúrese de llamar al setTheme() en onCreate() ANTES de llamar al setContentView(). Luego, si desea cambiar dinámicamente el tema nuevamente más adelante, simplemente debe reiniciar su actividad.

+0

Cuando hago esto, todavía veo el tema predeterminado por una fracción de segundo. –

0

Otra forma sería tener un tipo de pantalla de bienvenida que verificará una variable de preferencia, por ejemplo, y luego decidirá si se usa el tema claro u oscuro. De esta forma también podría usar diseños XML.

EDITAR: Otra forma es tener todos los elementos de definición de diseño en el método onCreate() y luego activar el método onStart() cuando esté listo.

1

Si va a añadir un tema a todo el programa de lo que podría empezar por hacer:

En el manifiesto se agrega a su etiqueta de la aplicación que está utilizando un tema.

<application android:theme="@style/mythemename"> 

luego ver Theme XML para asegurarse de que usted tiene lo que necesita declarados en los lugares apropiados.

Si es sólo para una acción particular habría que agregar la etiqueta de actividad

<activity android:theme="@android:style/Theme.propertyname"> 

También puede, si desea que su tema para cambiar sólo el color de fondo, siga el mismo patrón, ya sea con la actividad o etiqueta de la aplicación (cualquiera que esté usando) y establezca el nombre del elemento "colorbackground" a lo que desea.

También puede usar Theme XML y rehacer lo que desee en su tema actual y llamarlo su tema personalizado utilizando el método anterior.

Espero que esto ayude y, si no, díganmelo para que pueda ayudarlo mejor en el futuro.

Cuestiones relacionadas