temas - textappearance android
¿Cómo crear programáticamente un estilo de tema de Android? (1)
Hay muchos documentos y tutoriales sobre cómo crear o personalizar un estilo de tema de Android a través de XML, pero no han podido encontrar una forma de crearlo en código. ¿Alguna idea sobre cómo crear el estilo en código en lugar de XML?
Este es el ejemplo XML, es necesario crearlo programáticamente en código:
<resources>
<style name="AppTheme" parent="android:Theme.Material">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<item name="android:colorAccent">@color/accent</item>
</style>
</resources>
respuesta corta: no es posible crear mediante programación un tema y establecerlo como tema de la aplicación (incluso si logramos crear un objeto Theme
) sin un ID de recurso de tema.
Detalles:
Cuando llama a setTheme
la función no tiene efecto en un método de ContextWrapper
, que al final llama a AssetManager
con el puntero de identificación de recurso, la clase AssetManager
tiene el método para aplicar el tema de la aplicación, que es la llamada JNI.
native static final void applyThemeStyle(long theme, int res, boolean force);
Como arriba, solo podemos pasar un ID de recurso para aplicar el estilo de tema. Pero las posibles opciones son
- Aunque está limitado a las constantes de características de clase de
Window
. Podemos usar las constantes setFeatureDrawable & feature para establecer algunos dibujables como,FEATURE_ACTION_BAR
,FEATURE_CONTEXT_MENU
, etc. - Usando la función setTheme de la actividad, podemos establecer el tema del recurso de estilo, que resolverá el problema mencionado en los comentarios de
AjaySharma
yNathan