如何使用自定义主题更改默认的文字颜色?

我正在尝试应该是很容易与主题,但我不知道如何:我希望所有的文字在我的应用程序默认为白色。 我在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您需要引用其中包含文本颜色itemstyle的名称。 现在你只是引用一个空的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> 

试试这个…