Cómo puedo cambiar el color de texto del botón de diálogo predeterminado en android 5
Tengo muchos cuadros de diálogo de alerta en mi aplicación. Es un diseño por defecto, pero estoy añadiendo botones positivos y negativos al diálogo. Así que los botones obtienen el color de texto predeterminado de Android 5 (verde). Traté de cambiarlo sin éxito. ¿Alguna idea de cómo cambiar ese color de texto?
Mi cuadro de diálogo personalizado:
- Cómo cambiar el color de entrada del imput en xml?
- Android Linkify enlaces textColor ignorado, estilo CSS anula posible?
- Androide ColorStateList creado mediante programación y aplicado a TextColor
- Android - ActionBarSherlock - Establecer el color del texto del submenú
- Android - ¿Cómo puedo cambiar el textColor en un TimePicker?
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); } }
Creación del cuadro de diálogo:
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage); builder.setNegativeButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ... } }).show();
Ese botón negativo es un botón de diálogo predeterminado y toma el color verde predeterminado de Android 5 Lollipop.
Muchas gracias
- Cambiar el color de texto de un solo ClickableSpan cuando se presiona sin afectar a otros ClickableSpans en el mismo TextView
- Cómo configurar TextColor con setTextColor (ColorsStateList colores)
- Cómo cambiar el color del texto del elemento de menú en Android?
- ¿Es posible cambiar el color del texto en una cadena a varios colores en Java?
- Cambiar el color de texto de NumberPicker
- Color del texto de la fila de elementos de ListPreference
- Configuración del tema de aplicación textColor a blanco causas Contexto El texto del elemento de menú debe ser blanco (invisible)
- Cambiar el color de texto de Time Picker
Puede intentar crear AlertDialog
objeto AlertDialog
y luego usarlo para configurarlo para cambiar el color del botón y luego mostrarlo (Tenga en cuenta que en el objeto del builder
lugar de llamar a show()
llamamos create()
para obtener el objeto 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()
La razón por la que tienes que hacerlo en "onShow ()" y no puede obtener ese botón después de crear el diálogo es que el botón no se han creado todavía.
Cambié AlertDialog.BUTTON_POSITIVE a AlertDialog.BUTTON_NEGATIVE para reflejar el cambio en su pregunta. Aunque es raro que el botón "Aceptar" sería un botón negativo. Normalmente es el botón positivo.
El color de los botones y otro texto también se puede cambiar a través del tema:
Values-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>
El resultado:
La solución más sencilla es:
dialog.show(); //Only after .show() was called dialog.getButton(dialog.BUTTON_NEGATIVE).setTextColor(neededColor); dialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(neededColor);
Aquí está una manera natural de hacerlo a través de estilos:
<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>
Establecer AlertDialogTheme
través de este atributo en su AppTheme
<item name="alertDialogTheme">@style/AlertDialogTheme</item>
O vía constructor en el constructor new AlertDialog.Builder(context, R.style.AlertDialogTheme)
Si desea cambiar el color de texto de los botones (positivo, negativo, neutro), simplemente añada a su estilo de diálogo personalizado:
<item name="colorAccent">@color/accent_color</item>
Por lo tanto, su estilo de diálogo debe tener este aspecto:
<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>
<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>
El color de los botones y otro texto también se puede cambiar usando appcompat:
Al igual que una nota de lado:
Los colores de los botones (y todo el estilo) también dependen del tema actual que puede ser bastante diferente cuando se utiliza
android.app.AlertDialog.Builder builder = new AlertDialog.Builder()
o
android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder()
(Mejor utilizar el segundo)
Para mí era diferente, usé un tema de botón
<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>
y porqué
Android: textColor
Era blanco allí … no vi cualquier texto del botón (los botones del diálogo son básicamente los botones también). Allí vamos, lo cambiamos, lo arreglamos.