动态更改 colors.xml 的值以更改 android 应用程序的外观
Posted
技术标签:
【中文标题】动态更改 colors.xml 的值以更改 android 应用程序的外观【英文标题】:Dynamically change values of colors.xml to change look and feel of android app 【发布时间】:2017-04-27 03:10:06 【问题描述】:问题: 我正在尝试即时更改我的 android 应用程序的外观和感觉。例如,应用程序启动并从服务器获取一组值。这些值是通常进入 colors.xml 的元素。我正在寻找的是一种动态更改 colors.xml 中的元素并使用从服务器接收到的这些新值对其进行更新的方法。我的理解是,通常情况下,这不能直接完成。但是有没有人找到解决方法?
如果可能,我想避免的事情: 我想避免在每个活动的 onCreate() 方法中为该视图中的每个元素设置颜色值。如果可能的话,我想避免这种情况。
有什么想法吗?
【问题讨论】:
【参考方案1】:您可以通过新引入的 firebase 远程配置来实现此更改,该配置提供远程配置来更改主题颜色或应用程序所需的任何其他值,例如促销、更新等
你可以参考这个Example
【讨论】:
但这会改变我的应用程序的所有实例。我想要的是根据某些特定条件更改我的应用程序的某些实例的外观。 您也可以在 Firebase 远程配置中应用条件...但是如果您的条件是自定义的,那么您必须在应用程序中建立自己的逻辑 好主意!但是当用户在小应用程序中不使用火基手段时 我没听懂你? @sushantgosavi【参考方案2】:不幸的是,资源目录中的所有颜色值(和其他资源)都被硬编码为静态最终整数。这意味着无法在运行时更改值。但是,您可以使用之前建议的解决方案之一或查看这个出色的解释:https://***.com/a/33992017/3662251
对于覆盖活动的getResources
方法并实现自定义Resources
类的一个很好的解决方法,我认为这是最无缝的解决方案:https://***.com/a/34178187/3662251
【讨论】:
是的。这就是我目前正在做的事情(覆盖 getResources())。到目前为止,这似乎是最好的前进方式。但我不太热衷于以编程方式在每个活动中对每个元素(如 TextView、EditText、布局)进行更改。希望有更简单的方法。 通常小部件使用 Activity 主题上下文进行样式设置。所以 TextView 的 getResources 方法实际上会从 Activity 中获取资源。 这非常适合在整个应用程序中调用getResources().getColor()
,但是有没有办法挂钩从内部布局资源中直接引用颜色?【参考方案3】:
我已经在我的应用程序中这样做了,从我的服务器获取像 #06FF67 这样的十六进制颜色代码并存储在 sharedpreferences - https://***.com/a/23024962/4741746
当需要设置来自服务器的新值时,只需用新数据覆盖相同的共享首选项值并设置为应用程序
或者你也可以使用随机颜色生成器 -https://***.com/a/5280929/4741746
【讨论】:
在此之前您是否使用过 sharedpreferences ?如果没有读 ***.com/a/23024962/4741746 :如果是 只需从您的服务器获取颜色,将其保存在 sharedpreferences 中,当您想更改颜色时,从 sharedpreferences 获取它到您的应用程序 谢谢苏珊特。这是我想到的解决方案。但问题(以及我不太热衷于使用它的原因)是它需要我在每个活动中以编程方式为每个视觉元素(按钮、文本框等)设置颜色 你需要动态创建每个小部件,如 edittext、textview、tabLayout 等,而不是设置为你的活动视图,我建议你选择 Burhanuddin Rashid 方式以上是关于动态更改 colors.xml 的值以更改 android 应用程序的外观的主要内容,如果未能解决你的问题,请参考以下文章
用户可以更改 Chrome 中 Redux/Mobx 的值以访问受限视图吗?