android - 覆盖常见的 XML 样式
问题描述
我有一个在两个应用程序之间共享的具有 XML 样式的通用组件。我希望能够在两个应用程序中更改该样式的字体,但不想重建组件。是否可以覆盖应用层中的组件样式?
我的共同风格
<style name="BoldText">
<item name="android:fontFamily">@font/opensans_bold</item>
</style>
如何在我的应用程序层中覆盖它而无需扩展样式?
更新
需要更好地解释这一点。我有一个通用组件,它引用了我的两个应用程序使用的模块中的通用布局文件。在我的应用程序层中使用通用组件我不想为它提供新的布局文件,但我确实希望使用应用程序层提供的新字体更新对“BoldText”的引用。
文件夹结构
-common
--src
---CheckboxWithDetails.kt
--res
---layouts
----checkbox_with_details.xml
-app
--src
---SomePageUsingCheckboxWithDetails.kt
-OtherApp
--src
---OtherPageUsingCheckboxWithDetails.kt
在SomePage
我需要带有细节的复选框的字体是不同的字体,然后OtherPage
我需要字体是另一种不同的字体。
我只是想避免制作两种不同的布局,并想知道目前是否可行。
解决方案
所以我确实想通了。您可以将属性定义为“引用”,然后只需将引用传递给应用层所需的字体属性即可。
这并不能解决从通用组件覆盖样式的原始问题,但是如果您希望为多个应用程序自定义通用组件,它是一个解决方案。
属性定义如下:
<declare-styelable name="CustomComponent">
<attr name="messageFont" format="reference" />
</declare-styleable>
在 App 层中使用它。
<CustomComponent
app:messageFont=@font/opensans_regular />
推荐阅读
- node.js - 如何在 fabric-sdk-node 中解码 ProposalResponsePayload
- php - 如何在文件夹包含的每个 html 文件中包含单独的头文件?
- cordova - Cordova 仅触发 wifi 的离线网络事件
- python-2.7 - 使用 Vstack Python 合并字符串的不同维度或列
- c# - 如何找到每个数字在 3 中的所有三位数字,并且数字的加法等于数字本身
- python - 如何用一个替换多个python装饰器?
- ajax - 在codeigniter上使用ajax发送url
- haskell - 将 MonadPlus 导入我的 haskell 程序
- javascript - 在 Firefox 中加载伊朗地图时出错
- xcode - 检测到可能有害的通知发布率