我希望用户能够在我的整个应用中切换颜色皮肤。我的意思是,当用户按下屏幕上的按钮时,动态地切换应用程序某些自定义视图的样式。我知道如果在
因此,按默认情况下,“AppTheme”上声明的自定义颜色将默认应用,使用颜色
如何实现这一点?
onCreate()
方法之前调用Activity.setTheme()
,你可以动态地改变应用程序的主题,但普通视图(例如NavigationView
)应用于其xml布局的自定义样式没有设置setTheme
或setStyle
方法,因此似乎不可能动态地改变它们的样式。
我认为实现我的目标可以引用在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
是不正确的,我不知道如何访问该颜色。如何实现这一点?
?attr/customAttributeName
进行引用,因此在您的情况下,您需要在CustomActionBar
主题中放置?attr/customColor
。 - TR4Androidattrs.xml
文件中定义了吗?每个自定义属性都需要在那里定义,以便可以找到它。在该文件中放置类似<resources><attr name="customColor" format="color"/></resources>
的内容。 - TR4Android