AlertDialog按钮文本颜色与支持库v24.2.1

问题描述:

我有AlertDialog问题。这些按钮不再使用accentColor来设置按钮文本颜色。AlertDialog按钮文本颜色与支持库v24.2.1

我正在使用最新的支持库v24.2.1。我的造型我对话,我styles.xml方式如下:

<style name="Base.Theme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:alertDialogTheme">@style/Widget.DialogStyle</item> 
    <item name="alertDialogTheme">@style/Widget.DialogStyle</item> 
</style> 

和Widget.DialogStyle看起来是这样的:

<style name="Widget.DialogStyle" parent="@style/Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/primaryColor</item> 
    <item name="colorAccent">@color/primaryColor</item> 
    <item name="android:textColorPrimary">@color/primaryText</item> 
    <item name="android:textColor">@color/primaryText</item> 
    <item name="android:background">@color/backgroundColor</item> 
    <item name="android:textAppearanceLarge">@color/primaryText</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
</style> 

在应用程序的API低于24个的对话框按钮有色与colorAccent,但在API 24上,这不再是行为(文字是黑色的,应该是橙色的)。请参阅以下screenshot

有没有人知道如何让accentColor回到按钮上? 谢谢。

对于某些AlertDialog实现,按钮包含在ButtonBar 中,其样式从buttonBarButtonStyle开始。所以你必须覆盖你从父主题继承的设置(Theme.AppCompat.Light.Dialog.Alert)。

添加以下项目Widget.DialogStyle

<item name="buttonBarButtonStyle">@style/MyButtonStyle</item> 

并添加一个名为MyButtonStyle这样的另一种风格:

<style name="MyButtonStyle" parent="Widget.AppCompat.Button.Borderless"> 
    <!-- Set background drawable and text size of the buttons here 
    <item name="android:background">@color/my_dialog_dark</item>--> 
    <item name="android:textSize">18sp</item> 

    <!-- this is the button text color! --> 
    <item name="android:textColor">@color/primaryColor</item> 
</style> 

编辑

感谢kirtan403指出这一点:你如果Widget.AppCompat.Button.Borderless没有,也可以使用另一个父按钮样式不符合你的要求。 colorAccent不施加到AlertDialog按钮在AndroidÑ

使用Widget.AppCompat.Button.ButtonBar.AlertDialog作为按钮父样式的example by [email protected]可以在AOSP问题220699中找到。

+0

@Christian LeichtJørgensen - 为我工作,在DialogFragment中都带有独立的AlertDialog和AlertDialog。现在,我真的希望它也适用于你 – 0X0nosugar

+0

这个伎俩。感谢您的帮助! –

+0

这个变化是否记录在任何地方? –

一定要导入的正确AlertDialog

import android.support.v7.app.AlertDialog 

也可以尝试与另一AlertDialog.Builder构造膨胀的对话框:

android.support.v7.app.AlertDialog.Builder#Builder(android.content.Context, int) 

这意味着,第二个参数是对话框的风格:

mDialog = new AlertDialog.Builder(context, R.style.Widget.DialogStyle).create(); 

编辑:
共享的代码,我用它来显示警告对话框:

public AlertDialog showSimpleDialog(Context context, String title, String message, String btnOk, DialogInterface.OnClickListener handler) { 
    if (mDialog != null && mDialog.isShowing()) { 
     mDialog.dismiss(); 
     mDialog = null; 
    } 
    mDialog = new AlertDialog.Builder(context, R.style.AppTheme_Dialog).create(); 
    mDialog.setTitle(title); 
    mDialog.setMessage(message); 
    mDialog.setButton(DialogInterface.BUTTON_POSITIVE, btnOk, handler); 
    mDialog.setCanceledOnTouchOutside(false); 
    mDialog.show(); 
    return mDialog; 
} 

和风格:

<style name="AppTheme.Dialog" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="colorAccent">@color/colorPrimary</item> //blue 
    <item name="android:textColorPrimary">@color/primary_text_material_light</item> //black 
    <item name="android:windowMinWidthMajor">97%</item> 
    <item name="android:windowMinWidthMinor">97%</item> 
</style> 

和按钮是蓝色的。测试仿真器API 24.

+0

我刚刚使用模拟器进行了测试:我的应用程序之一,也是OP的代码。在牛轧糖上运行时,都使用按钮文字颜色的主要文字颜色。这可能是另一个牛轧糖的错误:(昨天有人发布关于动画问题,今天这... – 0X0nosugar

+0

因此,我建议你使用支持库,因为它是独立于系统版本风格的。 –

+0

谢谢,但这正是我我在做:)你在牛轧糖上测试了你的答案吗?我真的认为这是一个错误。非AppCompat AlertDialog:没问题。 DialogFragment:没问题。 AppCompat AlertDialog:Button上的文本颜色是textColorPrimary(来自对话框样式)。如果您可以使用您发布的代码和OP的style.xml来运行自己的测试,并告诉我们您是否可以确认问题,那将是非常好的。 – 0X0nosugar