如何更改Android 5中的默认对话框button文本颜色

我的应用程序中有很多提醒对话框。 这是一个默认的布局,但我正在向对话框添加正面和负面的button。 所以button得到Android 5(绿色)的默认文本颜色。 我试图改变它没有成功。 任何想法如何改变文字颜色?

我的自定义对话框

public class MyCustomDialog extends AlertDialog.Builder { public MyCustomDialog(Context context,String title,String message) { super(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); View viewDialog = inflater.inflate(R.layout.dialog_simple, null, false); TextView titleTextView = (TextView)viewDialog.findViewById(R.id.title); titleTextView.setText(title); TextView messageTextView = (TextView)viewDialog.findViewById(R.id.message); messageTextView.setText(message); this.setCancelable(false); this.setView(viewDialog); } } 

创build对话框:

 MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage); builder.setNegativeButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ... } }).show(); 

negativeButton是一个默认的对话框button,并采用Android 5 Lollipop的默认绿色。

非常感谢

自定义对话框与绿色按钮

您可以尝试先创buildAlertDialog对象,然后使用它来设置更改button的颜色,然后显示它(请注意,在builder对象上而不是调用show()我们调用create()来获取AlertDialog对象:

 //1. create a dialog object 'dialog' MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage); AlertDialog dialog = builder.setNegativeButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ... } }).create(); //2. now setup to change color of the button dialog.setOnShowListener( new OnShowListener() { @Override public void onShow(DialogInterface arg0) { dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(COLOR_I_WANT); } } dialog.show() 

您必须在“onShow()”上执行此操作的原因是,创build对话框后不能只是获取该button,因为该button不会被创build。

我将AlertDialog.BUTTON_POSITIVE更改为AlertDialog.BUTTON_NEGATIVE以反映您的问题中的更改。 虽然“确定”button将是一个负面的button是奇怪的。 通常这是正面的button。

button和其他文本的颜色也可以通过主题进行更改:

值-21 / styles.xml

 <style name="AppTheme" parent="..."> ... <item name="android:timePickerDialogTheme">@style/AlertDialogCustom</item> <item name="android:datePickerDialogTheme">@style/AlertDialogCustom</item> <item name="android:alertDialogTheme">@style/AlertDialogCustom</item> </style> <style name="AlertDialogCustom" parent="android:Theme.Material.Light.Dialog.Alert"> <item name="android:colorPrimary">#00397F</item> <item name="android:colorAccent">#0AAEEF</item> </style> 

结果:

对话日期选择器

最简单的解决scheme是:

 dialog.show(); //Only after .show() was called dialog.getButton(dialog.BUTTON_NEGATIVE).setTextColor(neededColor); dialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(neededColor); 

这是通过样式完成的一种自然的方式:

 <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item> <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item> </style> <style name="NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">#f00</item> </style> <style name="PositiveButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">#00f</item> </style> 

通过AlertDialogTheme这个属性设置AppTheme

 <item name="alertDialogTheme">@style/AlertDialogTheme</item> 

或者通过构造器中的构造函数创buildnew AlertDialog.Builder(context, R.style.AlertDialogTheme)

 <style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:colorPrimary">#00397F</item> <item name="android:textColorPrimary">#22397F</item> <item name="android:colorAccent">#00397F</item> <item name="colorPrimaryDark">#22397F</item> </style> 

button和其他文本的颜色也可以使用appcompat进行更改:

如果你想改变button的文字颜色(正面,负面,中性),只需添加到您的自定义对话框样式:

 <item name="colorAccent">@color/accent_color</item> 

所以,你的对话风格必须如下所示:

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

正如旁注:

button的颜色(以及整个风格)也取决于当前的主题,当你使用时可能会有所不同

  android.app.AlertDialog.Builder builder = new AlertDialog.Builder() 

要么

  android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder() 

(更好地使用第二个)

对我来说是不同的,我用了一个button主题

 <style name="ButtonLight_pink" parent="android:Widget.Button"> <item name="android:background">@drawable/light_pink_btn_default_holo_light</item> <item name="android:minHeight">48dip</item> <item name="android:minWidth">64dip</item> <item name="android:textColor">@color/tab_background_light_pink</item> </style> 

因为

机器人:文字颜色

在那里是白色的…我没有看到任何button文本(对话框button基本上也是button)。 我们去,改变它,修好它。