studio programacion móviles libros desarrollo desarrollar curso color cambiar aprende aplicaciones android android-layout dialog android-5.0-lollipop android-alertdialog textcolor

móviles - manual de programacion android pdf



¿Cómo puedo cambiar el color del texto del botón de diálogo predeterminado en Android 5? (9)

Aquí hay una forma natural de hacerlo con estilos:

Si su 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 su AppTheme se hereda 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>

Use su AlertDialogTheme en su AppTheme

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

o en constructor

androidx.appcompat.app.AlertDialog.Builder(context, R.style.AlertDialogTheme)

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 cuadro de 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 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); } }

Crear 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 Boton negativo es un botón de diálogo predeterminado y toma el color verde predeterminado de Android 5 Lollipop.

Muchas gracias


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:


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

Forma básica

Si solo desea cambiar 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

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

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorAccent">@color/colorPrimary</item> </style>

Y aplique el tema en AlertDialog.Builder

AlertDialog.Builder builder = new AlertDialog.Builder(this, 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);


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 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 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. Por lo general, es el botón positivo.


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

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

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

<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>


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 usar el segundo)


para mí fue 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

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


<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: