2016-08-15 140 views
0

我想给用户切换我的整个应用程序的颜色皮肤的可能性。我的意思是当用户按下屏幕的按钮时,动态切换应用程序的一些自定义视图的样式。我知道,如果您在onCreate()方法之前调用Activity.setTheme(),则可以动态更改应用程序的主题,但在其xml布局上应用了自定义样式的普通视图(例如,NavigationView)不具有setTheme或setStyle方法,因此它是似乎不可能动态地改变它们的样式。是否可以引用styles.xml文件中的属性?

我认为我的目标可能会引用在styles.xml文件中声明的AppTheme中声明的颜色。我的意思是,我可以声明两个AppThemes,每个都有一组颜色,然后在为自定义视图声明的自定义样式中引用颜色。事情是这样的:

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat"> 
     <item name="customColor">#111111</item> 
    </style> 

    <style name="AppTheme.AnotherColor" parent="Theme.AppCompat"> 
     <item name="customColor">#222222</item> 
    </style> 

    <style name="CustomActionBar"> 
     <!-- title text color --> 
     <item name="android:textColorPrimary">@styles/customColor</item> 
    </style> 
</resources> 

所以,在默认情况下,自定义颜色上宣布我的“AppTheme”系统将默认使用颜色111111应用。但是当我使用setTheme(R.styles.AppTheme_AnotherColor)更改我的应用的主题时,应用的颜色将为222222。如果这是可能的,那将是完美的!但这是不可能的,或者我不知道如何直接从同一个styles.xml文件的另一种样式访问在样式中​​声明的颜色。我的意思是@styles/customColor是不正确的,我不知道如何访问该颜色。

这是如何实现的?

+0

自定义属性是使用'?attr/customAttributeName'引用的,因此在您的情况下,您需要将'?attr/customColor'放入您的'CustomActionBar'主题中。 – TR4Android

+0

@ TR4Android找不到该属性。请测试它。您应该从另一个