Android将textColor值设置为全局

Posted

技术标签:

【中文标题】Android将textColor值设置为全局【英文标题】:Android Setting textColor values as Global 【发布时间】:2012-08-16 22:29:24 【问题描述】:

我正在做一些教程,并尝试尝试使用 textColor。这可以很好地使用每个 Widget 中的属性,它是 layout xml 或 style 属性。但我想知道是否可以定义一个全局 textColor,据我所知不是。

我在这些页面上找到了解决方案:

http://www.therealjoshua.com/2012/01/styling-android-with-defaults/

http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/

在我的小程序中,我使用了 EditText、RadioButton 和 Button。如果我使用父 @android:TextAppearance 的样式块设置每个单个小部件的 TextAppearance,小部件将失去其他属性。于是我搜索了style.xml和theme.xml,找到了一个很简短的解决方案:

<resources>
  <style name="MyTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:editTextColor">@android:color/white</item>
    <item name="android:textColorPrimaryDisableOnly">#FFFFFF</item>
    <item name="android:color/primary_text_light">#FFFFFF</item>      
  </style>           
</resources>

尽管在theme.xml中使用了预定义的颜色

<style name="TextAppearance.Widget.Button" parent="TextAppearance.Small.Inverse">
    <item name="android:textColor">@android:color/primary_text_light_nodisable</item>
</style>

我的第一个问题:有没有办法像使用其他属性一样覆盖@android:color/primary_text_light_nodisable 的值?

其实我想我自己解决了这个问题:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

  <style name="MyTheme" parent="android:Theme.Light">
    <item name="android:textAppearance">@style/MyTextAppearance</item>
    <item name="android:textAppearanceButton">@style/MyTextAppearanceButton</item>
    <item name="android:editTextStyle">@style/MyEditTextStyle</item>
    <item name="android:radioButtonStyle">@style/MyRadioButtonStyle</item>     
  </style>

  <style name="MyTextAppearance" parent="@android:style/TextAppearance">
    <item name="android:textColor">@android:color/white</item>
  </style>

  <style name="MyTextAppearanceButton" parent="@android:style/TextAppearance.Widget.Button">
    <item name="android:textColor">@android:color/white</item>
  </style>

  <style name="MyEditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:textColor">@android:color/white</item>
  </style>

  <style name="MyRadioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton">
    <item name="android:textColor">@android:color/white</item>
  </style>

</resources>

所以我的第二个问题是,如果这是正确的方法,还是有一种捷径可以全局更改文本的颜色?

虽然我认为在 xml 中定义所有这些是最干净的方法,但我想知道您是否建议通过类方法来操作它?

抱歉,我是 Java 和 Android 编程的新手,感谢您的帮助!

【问题讨论】:

【参考方案1】:

您可以在 res/values 下创建一个 colors.xml 并从这里声明您的全局颜色。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="scheme">#007BB3</color>

    <color name="blue">#0000FF</color>
    <color name="white">#FFFFFF</color>
    <color name="grey">#C1C1C1</color>  
</resources>

【讨论】:

我试过这个并设置了 #FFFFFF 但它没有覆盖@android:color 的值... 嗨,很抱歉没有更清楚。你不能覆盖 @android:color (据我所知)但是你可以做的是在你的 colors.xml 中设置一个颜色,然后将它应用到你的 View 元素上。然后,当您想要更新颜色时,您可以在一个地方而不是整个布局文件中进行更改。 我认为您没有得到我的问题,这与设置颜色值无关,而是将应用程序中所有文本的颜色设置为正确且尽可能短的一种颜色。但我认为您可以在每个视图中使用 textColor 属性,也可以重新定义您使用的每个小部件的样式。

以上是关于Android将textColor值设置为全局的主要内容,如果未能解决你的问题,请参考以下文章

TextView简单学习

TextView简单学习

如何为 UILabel 的 textColor 属性设置动画?

绑定MvvmCross TextColor不适用于Android

如何在android中全局设置值[重复]

JS 动态修改CSS 样式方法/全局