AlertDialogbutton文本颜色与支持库v24.2.1

我有AlertDialog的问题。 button不使用accentColor来设置button文本颜色。

我正在使用最新的支持库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> 

在应用程序接口的低于24的对话框button被colorAccent上色,但在API 24这不再是行为(文本是黑色的,应该是橙色)。 看下面的截图 。

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

Solutions Collecting From Web of "AlertDialogbutton文本颜色与支持库v24.2.1"

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

将下列项目添加到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不符合您的要求,您也可以使用另一个父button样式的button。

nicola.v的示例… @ icapps.com使用Widget.AppCompat.Button.ButtonBar.AlertDialog作为button的父级样式可以在AOSP问题220699下find: colorAccent不适用于Android N上的AlertDialogbutton

确保你正在导入正确的AlertDialog

 import android.support.v7.app.AlertDialog 

另外尝试用另一个AlertDialog.Builder构造函数来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> 

和button是蓝色的。 在仿真器API 24上testing。