我想让用户能够切换整个应用程序的颜色皮肤。我的意思是当用户按下屏幕上的按钮时动态切换应用程序的某些自定义视图的样式。我知道如果你打电话Activity.setTheme()
before onCreate()
方法,您可以动态更改应用程序的主题,但普通视图(例如,NavigationView
)在其 xml 布局上应用自定义样式,没有 setTheme 或 setStyle 方法,因此似乎不可能动态更改其样式。
我认为我的目标可能是引用内部声明的 AppTheme 中声明的颜色styles.xml
文件。我的意思是,我可以声明两个 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
不正确,我不知道如何访问该颜色。
如何才能实现这一目标?
是的,绝对可以向主题添加自定义属性和颜色。为此,您需要:
-
在您的中定义您的自定义属性res/values/attrs.xml
file:
<resources>
<attr name="customColor" format="color" />
</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">?attr/customColor</item>
</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)