Android 如何从layout.xml中获取当前应用程序主题的颜色?

Android 如何从layout.xml中获取当前应用程序主题的颜色?,android,xml,android-layout,color-palette,Android,Xml,Android Layout,Color Palette,我制作了一个只使用一个主题的应用程序,但现在我希望用户能够在运行时更改它。由于某些布局元素需要使用特定颜色进行着色,因此所有my layout.xml-s都具有类似于android:background=“@color/colorBackground”之类的特性 目前,我在colors.xml中制作了一个彩色托盘。它看起来像这样: <?xml version="1.0" encoding="utf-8"?> <resources> <color name="

我制作了一个只使用一个主题的应用程序,但现在我希望用户能够在运行时更改它。由于某些布局元素需要使用特定颜色进行着色,因此所有my layout.xml-s都具有类似于
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>

#607D8B
#455A64
#FF9800
#FAFAFA
#F0F0F0
#AA000000
然而,这样我只能有一个主题。我在考虑做一些事情,比如让颜色成为主题样式的一部分(所有主题都有相同的颜色项,但值不同)

如何使我的布局文件能够检测应用程序当前主题并从中获取颜色名称?所以类似于
android:background=“[currentTheme.colorBackground]”“
这样我就可以拥有多种样式,然后在它们之间进行更改


我曾考虑将主题放在共享的预引用或类似的内容中,然后在重写
onCreate()
方法时通过编程更改颜色,但这似乎过于复杂,我认为一定有更简单的方法。但是我在网上找不到任何东西。

android:background=“?android:colorPrimary”

amitairos指出了如何使用标准调色板来设置布局样式,但您问,当您在不同主题中有多个调色板时,如何通过编程切换主题

要在OnCreate中以编程方式设置活动主题,请执行以下操作:
activity.setTheme(R.style.FirstTheme)

但是,不要相信我的话。见另一个答案:

相关进一步阅读:

您在网上找不到任何东西吗?我知道我看过关于如何在运行时动态更改主题的教程