Android 重写上下文的`getResources()`以在xml中工作

Android 重写上下文的`getResources()`以在xml中工作,android,xml,resources,overriding,Android,Xml,Resources,Overriding,我有一个自定义的Resources类,可以在其中设置颜色,这些颜色将覆盖res/values/Colors中定义的颜色。每个活动都重写getResources()方法以返回我的自定义资源对象。如果我通过编程方式接收颜色(在java中调用getResources().getColor(R.color.xxx)),一切都会按预期工作。问题出在xml布局文件中。如果我在那里定义颜色(即使用textColor=“@color/xxx”),它将始终使用/res/values/colors.xml中的颜色,

我有一个自定义的
Resources
类,可以在其中设置颜色,这些颜色将覆盖res/values/Colors中定义的颜色。每个活动都重写
getResources()
方法以返回我的自定义资源对象。如果我通过编程方式接收颜色(在java中调用
getResources().getColor(R.color.xxx)
),一切都会按预期工作。问题出在xml布局文件中。如果我在那里定义颜色(即使用
textColor=“@color/xxx”
),它将始终使用/res/values/colors.xml中的颜色,而不是我覆盖的颜色。有没有一种方法可以改变这种行为,即当从XML膨胀时,我的自定义资源对象被使用了?

在我无法找到
属性集的实际实现后,我意识到整个想法是错误的。我猜,因为资源是预编译的,所以它们的来源与使用
Resources
类的来源不同。解决方案是构建系统本身。在库中,资源的优先级低于正在使用它的应用程序。因此,使用my library的应用程序可以通过在colors.xml中使用相同的名称定义自己的库资源来覆盖库资源

一种方法是将自定义颜色值放入“color.xml”中。然后您可以从Java文件和xml文件访问它。没有人可以在运行时向colors.xml添加颜色!!!是的,先生。我同意。我想你误解我了。我只是建议,与其覆盖默认颜色,不如在xml文件中(不是在运行时)添加不同名称的自定义颜色,然后改用它。我只是想得到你的用例和同样的需求。@shobhitpurisry。我已经设计了自定义资源类来覆盖我自己的colors.xml。我正在开发一个库和一个使用它的客户端,希望设置更适合自己应用程序的自定义颜色。如果它是一个图书馆,那么它是完全有意义的。有趣的。。。