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: