¿Cómo puedo cambiar el color del 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 predeterminado pero estoy agregando botones positivos y negativos al diálogo. Entonces los botones obtienen el color de texto predeterminado de Android 5 (verde). Intenté cambiarlo sin éxito. ¿Alguna idea de cómo cambiar ese color de texto?
Mi cuadro de diálogo personalizado:
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);
} }
Creando el 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
Aquí tienes una forma natural de hacerlo con estilos:
Si AppTheme
se hereda de Theme.MaterialComponents
, entonces:
<style name="AlertDialogTheme" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
<item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
<item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>
<style name="NegativeButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:textColor">#f00</item>
</style>
<style name="PositiveButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:textColor">#00f</item>
</style>
Si lo AppTheme
heredas de Theme.AppCompat
:
<style name="AlertDialogTheme" parent="ThemeOverlay.AppCompat.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>
Usa AlertDialogTheme
tu en tuAppTheme
<item name="alertDialogTheme">@style/AlertDialogTheme</item>
o en constructor
androidx.appcompat.app.AlertDialog.Builder(context, R.style.AlertDialogTheme)
o si está utilizando MaterialAlertDialogBuilder, utilice
<item name="materialAlertDialogTheme">@style/AlertDialogTheme</item>
Puede intentar crear el AlertDialog
objeto primero y luego usarlo para configurar el cambio del color del botón y luego mostrarlo. (Tenga en cuenta que en el builder
objeto en lugar de llamar show()
llamamos create()
para obtener el AlertDialog
objeto:
//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 tiene que hacerlo onShow()
y no puede simplemente obtener ese botón después de crear su cuadro de diálogo es que el botón aún no se habría creado.
Cambié AlertDialog.BUTTON_POSITIVE
a AlertDialog.BUTTON_NEGATIVE
para reflejar el cambio en su pregunta. Aunque es extraño que el botón "Aceptar" sea un botón negativo. Suele ser el botón positivo.
El color de los botones y otro texto también se puede cambiar mediante tema:
valores-21/estilos.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: