2015-09-26 70 views
19

有很多文档和教程上创建或通过XML定制一个Android主题风格,但一直没能找到一种方法,在代码中创建它。关于如何在代码而不是xml中创建样式的任何想法?如何以编程方式创建Android主题样式?

这是示例XML,需要在代码编程方式创建这样的:

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

为什么你希望它是编程做的原因吗?如果你只是想在运行时动态改变风格,你可以检查此链接http://stackoverflow.com/questions/3241729/android-dynamically-change-style-at-runtime。如果你想简单检索代码风格属性 - 检查:http://stackoverflow.com/questions/13719103/how-to-retrieve-style-attributes-programatically-from-styles-xml – random

+0

@random没有具体的理由,厌倦了xml所以只是玩弄,看看是否有可能在飞行中创建主题 – Mercury

+4

@random我有一个原因。我需要动态地给颜色,目前颜色没有决定。所以,我在xml中编写像上面这样的主题,但我只想在第一个屏幕上动态显示颜色。因此,它将适用于所有屏幕。 –

回答

2

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

详情:

当你调用setTheme ineffect的ContextWrapper的方法, 这在结束与资源ID指针调用AssetManager功能,AssetManager类适用于应用程序的主题的方法,这是JNI调用

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

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

  1. 虽然它限于Window类的特征常量。我们可以使用 setFeatureDrawable &功能常数设置一些可绘制 一样,FEATURE_ACTION_BARFEATURE_CONTEXT_MENU等。
  2. 从活动使用setTheme功能,我们可以设置从样式资源为主题,将由AjaySharma &解决在评论中提到的问题Nathan
相关问题