temas - styles android studio
Cómo establecer un tema diferente para un Diseño (3)
Establecí un tema predeterminado para toda la aplicación. Está definido en styles.xml de la siguiente manera:
<style name="DefaultTheme" parent="@android:style/Theme.Holo.Light">
<!-- Customization here -->
</style>
También he definido un tema oscuro:
<style name="DarkTheme" parent="@android:style/Theme.Holo">
<!-- Customization here -->
</style>
En el manifiesto, se declara el tema de la luz como el tema principal de la aplicación:
<application
...
android:theme="@style/DefaultTheme" >
Ahora esto funciona bien, pero en una actividad, necesito establecer un tema diferente para un Diseño único. Algo como esto:
+--------------------------------------------------+
| Parent Linear layout (default theme) |
| |
| +------------------------------------+ +-------+ |
| | | | | |
| | Left linear layout | | | |
| | (default theme) | | | |
| | | | | |
| | | | | |
| | | | ·<----------- Right Linear Layout
| | | | | | (Need it in dark theme)
| | | | | |
| | | | | |
| +------------------------------------+ +-------+ |
+--------------------------------------------------+
En el archivo xml de diseño, estoy tratando de establecer un tema para el niño más a la derecha, LinearLayout:
<LinearLayout
style="@style/DarkTheme">
...
Esperaría que esto funcionara bien, y aplicar el tema oscuro solo al diseño correcto (y sus vistas secundarias), pero no está funcionando. He intentado reemplazar el @style con un estilo incorporado de @android: inútilmente. Lo he probado en el editor de diseño y en el dispositivo / simulador real.
¿Es posible aplicar un tema o estilo personalizado a un solo diseño?
AFAIK no puedes aplicar un tema al diseño usando XML.
Sin embargo, puede usar ContextThemeWrapper()
para aplicar el tema al crear el diseño mediante programación.
LinearLayout darkThemeLayout = new LinearLayout(new ContextThemeWrapper(context, R.style.DarkTheme));
Esto ahora es posible usando la propiedad android:theme
en la vista y configurándola según el tema que desee. Tenga en cuenta que las vistas secundarias heredarán el tema de sus padres.
Con la biblioteca de soporte puede hacer:
app:theme="R.style.MyTheme"