如何使用自定义主题更改默认的文字颜色?
我正在尝试应该是很容易与主题,但我不知道如何:我希望所有的文字在我的应用程序默认为白色。 我在theme.xml中创build了一个自定义主题:
<style name="Theme" parent="@android:Theme"> </style> <style name="TextAppearance.Theme" parent="@android:TextAppearance.Theme"> <item name="android:textColor">#ffffffff</item> </style>
并将其设置为整个应用程序:
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme">
但标签仍然是黑色的。 less了什么东西?
PS:我如何额外定义不同文本大小的样式,以应用于每个小部件? 这是正确的吗?
<style name="Theme.smallText"> <item name="android:textSize">12dp</item> </style>
更新
我看了Android SDK中的themes.xml ,它显示了如何设置主题的文本样式:
<item name="textAppearance">@android:style/TextAppearance</item>
在我的情况下,它应该与这个定义一起工作:
<style name="Theme" parent="@android:Theme"> <item name="android:textAppearance">@style/MyText</item> </style> <style name="MyText" parent="@android:style/TextAppearance"> <item name="android:textColor">#ffffffff</item> </style>
但是,仍然没有工作。
刚刚发现了同一问题的另一个post: http : //groups.google.com/group/android-developers/browse_thread/thread/2897ccd0884546b9
在您的Manifest
您需要引用其中包含文本颜色item
的style
的名称。 现在你只是引用一个空的style
。 所以在你的theme.xml中只做这个style
:
<style name="Theme" parent="@android:style/TextAppearance"> <item name="android:textColor">#ffffffff</item> </style>
并保持你在Manifest
的引用相同( android:theme="@style/Theme"
)
编辑 :
theme.xml:
<style name="MyTheme" parent="@android:style/TextAppearance"> <item name="android:textColor">#ffffffff</item> <item name="android:textSize">12dp</item> </style>
performance:
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/MyTheme">
注意我将文本的颜色和大小组合成相同的style
。 另外,我将主题的名称改为MyTheme,现在在Manifest
引用它。 我改为@android:style/TextAppearance
作为parent
值。
在创build应用程序时,将在res / values文件夹中创build一个名为styles.xml的文件。 如果更改样式,则可以更改所有布局的背景,文本颜色等。 这样,你不必进入每个单独的布局,并手动改变它。
styles.xml:
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.AppBaseTheme" parent="@android:style/Theme.Light"> <item name="android:editTextColor">#295055</item> <item name="android:textColorPrimary">#295055</item> <item name="android:textColorSecondary">#295055</item> <item name="android:textColorTertiary">#295055</item> <item name="android:textColorPrimaryInverse">#295055</item> <item name="android:textColorSecondaryInverse">#295055</item> <item name="android:textColorTertiaryInverse">#295055</item> <item name="android:windowBackground">@drawable/custom_background</item> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style>
parent="@android:style/Theme.Light"
是Google的原生色彩。 以下是原生样式的参考: https : //android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml
默认的Android风格也被称为“主题”。 所以你把它称为主题可能是困惑的程序。
name="Theme.AppBaseTheme"
意味着你正在创build一个从parent="@android:style/Theme.Light"
inheritance所有样式的样式。 这部分你可以忽略,除非你想从AppBaseTheme再次inheritance。 = <style name="AppTheme" parent="AppBaseTheme">
@ drawable / custom_background是一个自定义图像,我把它放在drawable的文件夹中。 这是一个300×300的PNG图像。
#295055是深蓝色的颜色。
我的代码改变了背景和文字颜色。 对于Button文本,请查看Google的原生stlyes(上面给出的链接)。
然后在Android Manifest中,请记住包含代码:
<application android:theme="@style/Theme.AppBaseTheme">
您不能使用@android:style/TextAppearance
作为整个应用程序主题的父项; 这就是为什么koopaking3的解决scheme似乎相当破碎。
要使用自定义主题在应用程序中随处更改默认文本颜色,请尝试如下所示。 至less在Android 4.0+(API级别14+)上工作。
res/values/themes.xml
:
<resources> <style name="MyAppTheme" parent="android:Theme.Holo.Light"> <!-- Change default text colour from dark grey to black --> <item name="android:textColor">@android:color/black</item> </style> </resources>
performance:
<application ... android:theme="@style/MyAppTheme">
更新
与上面的缺点是,也禁用操作栏溢出菜单项使用默认的颜色,而不是灰色。 (当然,如果你不在应用程序的任何地方使用禁用的菜单项,这可能无关紧要。)
正如我通过问这个问题所学到的 ,更好的方法是使用drawable来定义颜色:
<item name="android:textColor">@drawable/default_text_color</item>
…用res/drawable/default_text_color.xml
指定单独的state_enabled="false"
color:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:color="@android:color/darker_gray"/> <item android:color="@android:color/black"/> </selector>
<color name="white">#FFFFFF</color> <style name="Mytext" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">20sp</item> <item name="android:textColor">@color/white</item> <item name="android:textStyle">bold</item> <item name="android:typeface">sans</item> </style>
试试这个…