我只使用一个主题创建了一个应用程序,但现在我希望用户能够在运行时更改它。由于某些布局元素需要使用特定颜色进行着色,因此我的所有layout.xml都具有android:background="@color/colorBackground"
或类似的属性。
目前,我在colors.xml
内制作了一个彩色托盘。它看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#607D8B</color>
<color name="colorPrimaryDark">#455A64</color>
<color name="colorAccent">#FF9800</color>
<color name="colorBackground">#FAFAFA</color>
<color name="colorTextSubtitle">#F0F0F0</color>
<color name="colorTextSubtitleBackground">#AA000000</color>
</resources>
然而,这样我只能有一个主题。我正在考虑做一些事情,比如让颜色成为主题风格的一部分(所有主题都有相同的颜色项,但是具有不同的值)。
我怎样才能使我的布局文件检测应用当前主题并从那里获取该颜色名称?像android:background="[currentTheme.colorBackground]"
这样的东西,这样我就可以拥有多种样式,然后在它们之间进行更改。
我考虑过将主题放在共享的prefferences或类似的东西中,然后在覆盖onCreate()
方法时以编程方式更改颜色,但这似乎过于复杂,我认为必须有一个更简单的方法。但是我在网上找不到任何东西。
答案 0 :(得分:3)
std::shared_ptr
答案 1 :(得分:0)
虽然amitairos指出如何设置样式的样式以使用标准调色板,但是当您在不同主题中有多个调色板时,您询问如何以编程方式切换主题。
在OnCreate中以编程方式设置活动主题:
activity.setTheme(R.style.FirstTheme);
但是,不要相信我的话。请参阅另一个SO答案:https://stackoverflow.com/a/18301723/1738090
相关进一步阅读: https://chris.banes.me/2014/11/12/theme-vs-style/ https://developer.android.com/guide/topics/ui/themes.html