在Android中运行时更新颜色值

时间:2015-07-31 17:29:54

标签: java android json android-theme

我目前正在使用默认主题的Android应用程序。布局使用colors.xml文件中定义的颜色:

<resources>

    <color name="colorPrimary">#FF0DB94E</color>
    <color name="textColorPrimary">#FFFFFF</color>
    <color name="accentColor">#FF1744</color>
    <color name="windowBackgroundPrimary">#F2F2F2</color>
    ...
</resources>

我想动态更新这些值:应用程序从URL获取JSON文件,数据存储在数组中。这部分已经编码。 JSON文件就像那样简单:

{
  "colorPrimary":"#00B0EB",
  "textColorPrimary":"#FFFFFFFF",
  "accentColor":"#FFFFFFFF",
  "windowBackgroundPrimary":"#FFFFFFFF",
  ...
}

我的问题是我不知道如何修改这些颜色值。它们存储的R.java文件在编译后无法访问,并且使用循环修改布局中的所有颜色引用似乎不是最好的方法。

任何人都有任何好方法的线索吗?

目前我有几种选择,但我真的不知道如何实施它们:

  • 使用其他版本的color.xml文件提供外部APK
  • 创建一个中间类,其中包含布局使用的所有颜色的引用

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

在Activity类

中使用此方法
getResources().getColor(int id)

ID:RESOURCEID

答案 1 :(得分:0)

在Activity中有一些与主题相关的方法,如activity.setTheme(R.style.MyTheme)等。但是所有这些方法都使用R.style标识符进行操作。

所以简而言之,你是对的。只有两个选项:

  1. APK如果您更喜欢外部主题
  2. 将用于包装内部动态主题的颜色数据的中级类