¿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 agrego botones positivos y negativos al diálogo. Entonces, 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 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

Diálogo personalizado con botón verde

Puede intentar crear AlertDialog objeto AlertDialog y luego usarlo para configurar el cambio de color del botón y luego mostrarlo. (Tenga en cuenta que en el objeto builder lugar de llamar a show() llamamos a 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 tiene que hacerlo en onShow() y no puede simplemente obtener ese botón después de crear su diálogo es porque el botón no se habrá creado aún.

Cambié AlertDialog.BUTTON_POSITIVE a AlertDialog.BUTTON_NEGATIVE para reflejar el cambio en su pregunta. Aunque es extraño que el botón “OK” sea un botón negativo. Por lo general, 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

   

El resultado:

DiálogoSelector de fechas

Esta es una forma natural de hacerlo a través de los estilos:

    

Establezca AlertDialogTheme través de este atributo en su AppTheme

 @style/AlertDialogTheme 

o vía constructor en el constructor new AlertDialog.Builder(context, R.style.AlertDialogTheme)

La solución más simple es:

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

Si desea cambiar el color del texto de los botones (positivo, negativo, neutral) solo agregue a su estilo de diálogo personalizado:

 @color/accent_color 

Entonces, su estilo de diálogo debe verse así:

  
  

El color de los botones y otros textos también se pueden cambiar con appcompat:

Hay dos formas de cambiar el color del botón de diálogo.

Manera Básica

Si solo desea cambiar en una actividad, escriba las dos líneas siguientes después de alertDialog.show();

 alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorPrimary)); alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorPrimaryDark)); 

Recomendado

Recomiendo agregar un tema para AlertDialog en styles.xml para que no tenga que escribir el mismo código una y otra vez en cada actividad / llamada de diálogo. Puede simplemente crear un estilo y aplicar ese tema en el cuadro de diálogo. Entonces, cuando quiera cambiar el color del cuadro de AlertDialog, simplemente cambie el color en styles.xml y todos los cuadros de diálogo se actualizarán en toda la aplicación.

  

Y aplica el tema en AlertDialog.Builder

 AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogTheme); 

Solo como una nota al margen:

Los colores de los botones (y todo el estilo) también dependen del tema actual, que puede ser bastante diferente cuando se usa

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

o

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

(mejor use el segundo)

para mí era diferente, utilicé un tema de botón

  

y porqué

android: textColor

estaba blanco allí … no vi ningún texto de botón (los botones de diálogo son básicamente botones). allí vamos, lo cambiamos, lo arreglamos.