【问题标题】:How to set theme colors in runtime?如何在运行时设置主题颜色?
【发布时间】:2020-05-06 14:58:20
【问题描述】:

目标:在 Android 应用中,我们从服务器接收颜色。登录后用户从 JSON 获得具体的颜色集,例如

{
    "color-primary": "#FFFFFF", 
    "color-primary-dark":"#FF0000"
 }

它可以是任何颜色。在下一个屏幕上,收到的颜色应该应用于视图(如主题)。颜色会影响背景、文本颜色等。

所做的事情: 拥有一组有限的主题并不能解决问题,因为我们可以接收随机的颜色组合。
简单的解决方案是使用BaseActivityBaseView 之类的东西,它们在每个具有特殊自定义属性的视图上应用颜色。
问题:我怎样才能更方便地做到这一点?试图找到解决方案一周 - 没有结果:(请帮助我

【问题讨论】:

  • 不确定,你在问什么,但它是不是类似于根据假设生成自动颜色假设图像具有红色基础,所以它将生成一个红色调色板并应用于文本颜色等视图和背景颜色?
  • 嗨,@Sam。一点也不,我有存储在网络上的颜色集。颜色键是预定义的并且始终相同("color-primary""color-primary-dark""color-accent" 等),但值不同。我想像 Android 主题那样做。这意味着,一旦我从 JSON 获得颜色集,我希望我的应用程序使用工具栏的原色,系统栏的深色原色,应用程序中所有按钮的强调色,所有标签的文本颜色应用等
  • 我认为你需要一个 App 主题引擎。浏览这个 repos..github.com/afollestad/aestheticgithub.com/garretyoder/Colorful。主要概念来自这个 repo 你也可以如果你想要github.com/garretyoder/app-theme-engine
  • 完成此操作后,您必须根据存储在 Web 中的值设置该强调色、原色。我个人使用 App-Theme-engine 设置不同的主题颜色,它已停产,但它就像一个魅力
  • 谢谢你,@Sam!尽管这些库已停产,但它们对我帮助很大!

标签: android user-interface mobile


【解决方案1】:

如果您正在寻找改变主题颜色的方法,我必须告诉您不能。这是因为主题是不可变的。但是正如您所说,您可以以编程方式在活动中应用颜色,如果您想更改整个应用程序的颜色,如您所说,您可以使用 BaseActivity 模式来做到这一点。我不知道您想更改什么,但可能类似于 actionBar?.setBackgroundDrawable(ColorDrawable(0xFFFFFF))

另一种方法是将颜色存储在数据库或单例类或全局变量中(取决于您的需要),每次加载活动时,按照您想要的方式进行更改。您可以为此使用接口并使活动实现您的接口

【讨论】:

  • 嗨,@moshen!感谢您的回复!是的,问题是我有一个存储在网络上的颜色和字体列表,我希望能够在应用程序中动态应用它们。似乎 BaseActivity 是实现这一点的唯一方法。我的想法是这样做的方式与您拥有一组有限的主题和自定义属性相同,并且在每个主题中都覆盖了值。所以我可以在 onCreate() 中调用 applyTheme() 并在自定义属性中设置正确的颜色值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2021-11-29
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多