android - 两个 Android 主题可以包含共同的值而不相互继承吗?
问题描述
我试图通过将功能分解为多个模块来保持我的应用程序清洁。
:App
:Features:Foo
:Features:Bar
:Ux
我已经在 :Ux 模块的 theme.xml 中定义了我的应用程序的主题,然后在整个应用程序中使用它。
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
...
</style>
但是,我的一些功能具有我想添加到主题中并在整个功能中使用的自定义属性。所以我在:Features:Foo 和:Features:Bar 中添加了一个attrs.xml 和themes.xml。
<style name="Theme.MyApp.Foo" parent="Theme.MaterialComponents.Light">
<item name="customFooViewColor">@android:color/holo_orange_dark</item>
</style>
和
<style name="Theme.MyApp.Bar" parent="Theme.MaterialComponents.Light">
<item name="customBarViewColor">@android:color/holo_green_light</item>
</style>
但是现在我想在 :Features:Baz 中添加一个新功能,它可以托管来自 :Features:Foo 和 :Features:Bar 的片段,因此它的主题需要包含 :Feature:Foo 的 attrs.xml 中定义的自定义属性和:Feature:Bar 的attrs.xml,以及在:Feature:Foo 的themes.xml 和:Feature:Bar 的themes.xml 中定义的那些属性的相同值。
一种解决方案是将这些自定义属性及其值移动到 :Ux 模块中,但这会污染整个应用程序,其中包含仅在几个模块中需要的特定于功能的属性。
正如@ritesh4302 指出的那样,我可以通过添加对这些模块的依赖项来访问 :Feature:Foo 和 :Feature:Bar 中的 attrs.xml 文件:Feature:Baz ,因此另一种解决方案是复制每个 :Features 中的所有字段:Foo 和 :Features:Bar 进入 :Features:Baz。
在:特点:Foo
<style name="Theme.MyApp.Foo" parent="Theme.MaterialComponents.Light">
<item name="customFooViewColor">@android:color/holo_orange_dark</item>
</style>
在:特点:酒吧
<style name="Theme.MyApp.Bar" parent="Theme.MaterialComponents.Light">
<item name="customBarViewColor">@android:color/holo_green_light</item>
</style>
在:特点:巴兹
<style name="Theme.MyApp.Baz" parent="Theme.MaterialComponents.Light">
<item name="customFooViewColor">@android:color/holo_orange_dark</item>
<item name="customBarViewColor">@android:color/holo_green_light</item>
</style>
显然,这种值的重复是有问题的,因为现在我需要在多个位置更改值时更新它们。
有没有办法避免重复而不将所有内容都放在:Ux 中?有没有人写过一个可以实现这个的构建插件?
解决方案
如果 :Feature:Baz 需要使用 :Feature:Foo 和 :Feature:Bar 编写的代码,那么您需要将它们添加为依赖项,并且一旦将它们添加为依赖项,您必须能够使用基本包中定义的自定义属性。
推荐阅读
- c++ - 将小数点更改为逗号
- python - 如何根据不同的dataFrame部分绘制(plotly.express)多条线
- c# - 在不使用任何库的情况下使用 C# Web API 分页大量数据
- r - 从 R 创建 .YAML 文件时,为什么有些字符串在引号中,而另一些则不是?
- powershell - New-MailboxExportRequest 按日期范围
- reactjs - 从 URL 获取数据在 ReactJS 中有效,但在 Native 中无效
- amazon-web-services - 停止后如何维持 EC2 实例的当前状态?
- android - 在 Flutter Android 上获取 FIS 身份验证令牌失败
- node.js - 如何在 socket-io nodeJs 上获取处理事件名称
- javascript - 打开画廊模式冻结页面