如何以编程方式创buildAndroid主题样式?

有很多关于通过XML创build或自定义Android主题风格的文档和教程,但还没有find一种方法在代码中创build它。 关于如何在代码而不是xml中创build样式的任何想法?

这是XML示例,需要在代码中以编程方式创build:

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

Solutions Collecting From Web of "如何以编程方式创buildAndroid主题样式?"

简短的回答:不可能以编程方式创build一个主题和设置为应用程序主题(即使我们实现创build一个Theme对象)没有主题资源ID。

细节:

当你调用setTheme ,函数ContextWrapper一个方法,最后调用AssetManager和资源id指针, AssetManager类中保存了应用程序主题的方法,即JNI调用

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

如上所述,我们只能通过资源ID来应用主题风格。 但可能的select是

  1. 尽pipe它限于Window类的常量。 我们可以使用setFeatureDrawable &feature常量来设置一些可绘制的,如FEATURE_ACTION_BARFEATURE_CONTEXT_MENU等。
  2. 从活动中使用setTheme函数,我们可以从样式资源中设置主题,这将解决AjaySharmaNathan在评论中提到的问题

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> 

你可以用这个…