返回

在 Android 中简化样式管理:从 strings.xml 引用 styles.xml 中的文本视图颜色

Android

从 strings.xml 中引用 styles.xml 中的文本视图颜色

问题

在 Android 开发中,管理文本视图颜色既需要在 strings.xml 文件中定义颜色,又需要在 styles.xml 文件中定义颜色。这可能会变得冗余且难以维护。有没有一种方法可以从 strings.xml 文件引用 styles.xml 中的文本视图颜色?

解决方案

使用特殊语法

你可以使用特殊语法 ?attr/,后跟 styles.xml 文件中定义的颜色属性的名称,从 strings.xml 文件引用 styles.xml 中的颜色。

例如,要引用在 styles.xml 文件中定义为 BadColour 的颜色,可以在 strings.xml 文件中使用以下语法:

<font color="?attr/BadColour">Text</font>

在 styles.xml 中定义颜色属性

要使引用有效,你需要在 styles.xml 文件中定义引用的颜色属性。例如,要定义 BadColour 颜色属性,可以添加以下行:

<style name="AppTheme" parent="android:Theme.Holo.NoActionBar">
    <item name="BadColour">#ff0000</item>
</style>

示例

为了更清楚地说明,这里是一个完整的示例:

strings.xml

<string name="my_text"><font color="?attr/BadColour">Bad</font> Text</string>

styles.xml

<style name="AppTheme" parent="android:Theme.Holo.NoActionBar">
    <item name="BadColour">#ff0000</item>
</style>

现在,my_text 字符串将部分显示为红色,使用从 styles.xml 中引用的 BadColour 值。

注意事项

  • 确保在 styles.xml 文件中正确定义颜色属性。
  • 引用时使用正确的颜色属性名称。
  • 这种方法仅适用于文本视图颜色的子部分。对于整个文本视图的颜色,你应该在 styles.xml 文件中定义文本视图样式并将其应用于文本视图。

结论

通过使用 ?attr/ 语法,你可以从 strings.xml 文件轻松引用 styles.xml 中的文本视图颜色,从而简化 Android 应用程序的样式管理。

常见问题解答

  • 问:如何定义整个文本视图的颜色?
    • 答: 在 styles.xml 文件中创建文本视图样式并将其应用于文本视图。
  • 问:除了颜色,还可以引用其他属性吗?
    • 答: 是的,你可以引用 styles.xml 中定义的任何属性。
  • 问:如何确保 styles.xml 中定义的颜色属性与 strings.xml 中引用的颜色属性匹配?
    • 答: 使用同一名称和数据类型定义颜色属性。
  • 问:这种方法有哪些优点?
    • 答: 它消除了重复,使样式管理更加集中。
  • 问:这种方法有哪些缺点?
    • 答: 它可能使 strings.xml 文件更难理解,因为颜色引用依赖于 styles.xml 文件。