【问题标题】:How to get colors from current app theme from within layout.xml?如何从 layout.xml 中获取当前应用主题的颜色?
【发布时间】:2017-01-13 00:02:53
【问题描述】:

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

但是,这样我只能有一个主题。我正在考虑做一些事情,比如让颜色成为主题样式的一部分(所有主题都将具有相同的颜色项,但具有不同的值)。

我怎样才能让我的布局文件检测应用程序的当前主题并从那里获取颜色名称?所以像android:background="[currentTheme.colorBackground]" 这样我就可以拥有多种样式,然后在它们之间进行更改。

我考虑将主题放在共享首选项或类似的东西中,然后在覆盖 onCreate() 方法时以编程方式更改颜色,但这似乎过于复杂,我认为必须有更简单的方法。但是我在网上找不到任何东西。

【问题讨论】:

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

标签: android xml android-layout color-palette


【解决方案1】:

android:background = "?android:colorPrimary"

【讨论】:

    【解决方案2】:

    虽然 amitairos 指出了如何设置布局以使用标准调色板,但您询问了如何在不同主题中有多个调色板时以编程方式切换主题。

    在 OnCreate 中以编程方式设置 activity 主题: 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2012-09-04
      • 2012-02-23
      相关资源
      最近更新 更多