使用样式的警报对话框文本颜色

时间:2016-12-16 13:23:55

标签: android alertdialog android-alertdialog android-styles

我刚刚在我的应用中更新了库版本,现在AlertDialog按钮的文本颜色为白色。在此之前,如果我没记错的话,那就是colorAccent属性指定它们。我尝试了许多不同的属性,但似乎没有一个属性能够发挥作用。

示例照片 - 在右下方,您可以看到非常隐蔽的按钮:

enter image description here

我当前的提醒对话框样式:

<style name="AlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/website_main</item>
    <item name="android:textColor">@color/website_main</item>
</style>

以我的主题风格:

<item name="android:alertDialogStyle">@style/AlertDialogStyle</item>

我使用的支持/设计/ appcompat的当前版本是:25.1.0

我在其中创建AlertDialog

的Java代码
android.support.v7.app.AlertDialog.Builder alertDialogBuilder = new android.support.v7.app.AlertDialog.Builder(activity);
    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton(activity.getString(R.string.ok), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    <UnrelatedLogic...>
                }
            });
    return alertDialogBuilder.show();

在这里,我使用的ListPreference也使用AlertDialog

android.support.v7.preference.ListPreference lang_preference = (android.support.v7.preference.ListPreference) findPreference("language_chooser");

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

它可能适用于您。这是我的enter image description here警报对话框样式:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">@color/teal</item>
        <item name="android:textColorPrimary">@color/bg_3</item>
        <item name="android:background">@color/bg_border</item>
    </style>

在活动/适配器中使用样式

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.AppCompatAlertDialogStyle);

答案 1 :(得分:2)

这有点令人困惑,但是alertDialogStyle用于设置Dialog框的样式,而不是它包含的任何子视图(尽管显然并非总是如此)。来自documentation

  

将样式应用于布局中的单个View时,属性   由样式定义的仅应用于View。如果是一种风格   应用于ViewGroup,子View元素将不会继承   style属性 - 仅直接应用的元素   style将应用其属性。但是,您可以应用样式   它适用于所有View元素 - 通过将样式应用为主题。

因此,您必须将样式应用为主题;其中还有一个属性:

<item name="android:alertDialogTheme">@style/AlertDialogStyle</item>

最后,textColor属性应该更改标题和正文文本的颜色,而不是按钮的文本颜色。您只需要应用colorAccent属性为按钮文本着色:

<style name="AlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/website_main</item>
</style>