Android主题文字颜色与警报对话框标题颜色冲突

时间:2014-08-05 07:36:14

标签: android android-alertdialog android-theme

我通过在styles.xml中定义主题来自定义我的Android应用。我想将基本文本颜色应用于我的应用程序的所有文本,但我希望将AlertDialog的外观保持为默认值(Holo.Light)。

  

styles.xml

<resources>

    <style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:textColor">@android:color/holo_red_dark</item>
        <item name="android:alertDialogTheme">@style/AlertDialogStyle</item>
    </style>

    <style name="AlertDialogStyle" parent="@android:style/Theme.Holo.Light.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@style/DialogWindowTitle</item>
    </style>

    <style name="DialogWindowTitle">
        <item name="android:maxLines">1</item>
        <item name="android:scrollHorizontally">true</item>
        <item name="android:textAppearance">@style/DialogWindowTitleAppearance</item>
    </style>

    <style name="DialogWindowTitleAppearance" parent="@android:style/TextAppearance.Holo.DialogWindowTitle">
        <item name="android:textColor">@android:color/holo_purple</item>
    </style>

</resources>

但是,AppTheme中定义的颜色会覆盖紫色:

enter image description here

如果我删除<item name="android:textColor">@android:color/holo_red_dark</item>中的行AppTheme,则标题的文字颜色会正确更改。 enter image description here

所以我的问题是:如何为我的应用主题定义文字颜色,同时为对话标题文字设置另一种颜色(或保留系统默认颜色)?

3 个答案:

答案 0 :(得分:1)

定义

<item name="android:textAppearanceLarge">...</item>
在AlertDialogStyle中

答案 1 :(得分:0)

在您的AndroidManifest.xml中

为您的活动设置另一个样式

<activity
    android:name="com.my.sample.Activity"
    android:theme="@android:style/Theme.Holo.Light.Dialog"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:label="@string/my_activity_name">
</activity>

答案 2 :(得分:0)

深入研究您想要更改的特定文本。它不工作的事实看起来像是一个错误。如果您需要内置警报对话框窗口而不是自定义主题窗口,则可以在构建警报框时使用此功能:

AlertDialog.Builder(Context context, int theme)

“主题”可以是AlertDialog.ThemeTraditional或其他一些AlertDialog主题常量。我想你现在已经开始了,可能会自己制作一个警告对话框来替换它,但上面的内容对我来说是一个充分的解决方法(我在浅灰色背景上有白色文字,所以我必须做点什么)。