如何更改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)。 我们去,改变它,修好它。