首页 > 解决方案 > 覆盖常见的 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我需要字体是另一种不同的字体。

我只是想避免制作两种不同的布局,并想知道目前是否可行。

标签: androidandroid-layout

解决方案


所以我确实想通了。您可以将属性定义为“引用”,然后只需将引用传递给应用层所需的字体属性即可。

这并不能解决从通用组件覆盖样式的原始问题,但是如果您希望为多个应用程序自定义通用组件,它是一个解决方案。

属性定义如下:

<declare-styelable name="CustomComponent">
     <attr name="messageFont" format="reference" />
</declare-styleable>

在 App 层中使用它。

<CustomComponent
   app:messageFont=@font/opensans_regular />

推荐阅读