How to programmatically create an Android theme style?

徘徊边缘 提交于 2019-11-27 15:41:11

问题


There are lots of docs and tutorials on creating or customising an Android theme style via XML, but have not been able to find a way to create it in code. Any ideas on how to create the style in code rather than xml?

This is the example XML, need to create this programmatically in code:

<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>

回答1:


short answer: Its not possible as programmatically create a theme & set as application theme ( even if we achieved to create a Theme object) without a theme resource id.

Details:

when you call setTheme the function ineffect a method of ContextWrapper, which at the end calls AssetManager with resource id pointer, AssetManager class holds the method for applying application theme, which is JNI call

native static final void applyThemeStyle(long theme, int res, boolean force);

As above we can only pass a resource id to apply the themestyle. But possible options are

  1. Though its limited to Window class feature constants. We can use setFeatureDrawable & feature constants to set some drawables like, FEATURE_ACTION_BAR, FEATURE_CONTEXT_MENU etc..
  2. Using setTheme function from activity, we can set the theme from style resource, that will solve the problem mentioned in comments by AjaySharma & Nathan


来源:https://stackoverflow.com/questions/32797436/how-to-programmatically-create-an-android-theme-style

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!