在运行时编辑AppTheme,如何在没有XML代码的情况下以编程方式执行此操作?

时间:2015-12-16 07:38:10

标签: android xml colors

我有以下问题:

json-array有响应,它包含来自服务器的颜色设置。并从不同的公司差异设置。有接下来的颜色:

1)主色,用于填充背景;

2)第二种颜色,突出显示背景上的文字,图标和按钮;

3)颜色,第一个颜色越深 - 用于分配;

4)用于着色文本和图标边界的颜色,如果第一种颜色与第二种颜色匹配;

(这与iOS上的颜色类比,因为我们编写本机应用程序并且在服务器上)

我不知道你是否可以在Theme中为整个应用程序手动设置这些颜色,或者这个配置必须以XML代码的形式存储,即我们需要编写一个生成xml-string的解析器(对我来说这是一个困难的方式=))? 另外 - 如果我想更改整个应用程序的主题,我该如何更好地以编程方式做到这一点?我知道的一种方式 - 我的所有活动都继承自类,它扩展了一个类,并在这个类中规定并更改了主题。也许还有其他方法吗?但关于风格生成的主要问题。

1 个答案:

答案 0 :(得分:0)

可悲的是,没有干净直接的方法来做到这一点。主题是在编译时生成的资源的一部分。而Resources.Theme是一个最终类,因此无法覆盖自定义行为。

所以你留下的选择都很糟糕:

  • 暴力改变受客户主题影响的每个小部件的每个视觉属性。呸。
  • 动态创建可以读入WebView的HTML页面,并将其用作UI而不是Android小部件。您可能必须编写许多将成为此Web UI一部分的预制JavaScript代码。
  • 最干净但几乎不可能的方式是这样:当每个客户在您的公司数据库中注册(以及他们的颜色品牌推广方案)时,您的构建过程会生成一个新的扩展APK,其中包含该客户的主题,然后将其上传到Google Play。您的应用程序需要知道要查找更新的扩展APK并让用户下载它(可能并不总是会发生),然后您的JSON响应将为您提供客户名称或任何您需要确定从哪个主题中取出的主题扩展APK。最后,您的应用会在您的白标UI的活动上设置主题。如果您的用户看到了客户的企业品牌颜色,那么很多事情都必须正确发生,这将是一个小小的奇迹。但我想我会提到灵感的想法。