Comment puis-je changer la couleur du ou des boutons dans un fichier de type AlertDialog
dans Android ?
Réponses
Trop de publicités?Il y a deux façons de procéder :
-
Via le code :
val builder = AlertDialog.Builder(activity!!) ... val dialog = builder.create() .apply { setOnShowListener { getButton(Dialog.BUTTON_NEGATIVE)?.setTextColor(...) } }
-
Via XML :
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar"> ... <item name="materialAlertDialogTheme">@style/ThemeOverlay.MyApp.MaterialAlertDialog</item> </style> <style name="ThemeOverlay.MyApp.MaterialAlertDialog" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog"> <item name="dialogCornerRadius">6dp</item> <item name="buttonBarNegativeButtonStyle">@style/Widget.MyApp.NegativeButton</item> <item name="buttonBarPositiveButtonStyle">@style/Widget.MyApp.PositiveButton</item> </style> <style name="Widget.MyApp.NegativeButton" parent="Widget.MaterialComponents.Button.TextButton.Dialog"> <item name="materialThemeOverlay">@style/ThemeOverlay.MyApp.NegativeButton</item> </style> <style name="Widget.MyApp.PositiveButton" parent="Widget.MaterialComponents.Button.TextButton.Dialog"> <item name="materialThemeOverlay">@style/ThemeOverlay.MyApp.PositiveButton</item> </style> <style name="ThemeOverlay.MyApp.NegativeButton" parent=""> <item name="colorPrimary">#f00</item> </style> <style name="ThemeOverlay.MyApp.PositiveButton" parent=""> <item name="colorPrimary">#00f</item> </style>
l'usage :
AlertDialog.Builder(this).setTitle("title").setMessage("message").setPositiveButton("positive", null)
.setNegativeButton("negative", null).show()
Ou, si vous ne voulez pas avoir le style par défaut :
AlertDialog.Builder(this, R.style.ThemeOverlay_MyApp_MaterialAlertDialog).setTitle("title")
.setMessage("message").setPositiveButton("positive", null)
.setNegativeButton("negative", null).show()
Pour changer la couleur des boutons de l'AlertDailog
Code :
// Initialize AlertDialog & AlertDialog Builder
AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);
builder.setTitle(R.String.AlertDialogTitle);
...........
.........
//Build your AlertDialog
AlertDialog Demo_alertDialog= builder.create();
Demo_alertDialog.show();
//For Positive Button:
Button b_pos;
b_pos=Demo_alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
if(b_pos!=null){
b_pos.setTextColor(getResources().getColor(R.color.YourColor));
}
//For Neutral Button:
Button b_neu;
b_neu=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
if(b_neu!=null){
b_neu.setTextColor(getResources().getColor(R.color.YourColor));
}
//For Negative Button:
Button b_neg;
b_neg=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
if(b_neg!=null){
b_neg.setTextColor(getResources().getColor(R.color.YourColor));
}
Si vous utilisez le DialogFragment (Android.app.DialogFragment), vous pouvez écraser la méthode onStart pour obtenir la gestion de tous les boutons (positif, négatif et neutre).
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View eventEditDialogView = View.inflate(this.getActivity(), R.layout.event_edit_dialog,
null);
builder.setTitle(getLocalizedString("edit_event"))
.setView(eventEditDialogView)
.setPositiveButton(getLocalizedString("all_events"), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(getLocalizedString("this_event"), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
return builder.create();
}
@Override
public void onStart() {
super.onStart();
Button positive = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE);
positive.setTextColor(Color.BLACK);
positive.setBackgroundColor(getResources().getColor(R.color.GrayBGColor));
}
Toutes les solutions ci-dessus fonctionneront avec AlertDialog ou Dialog créé sur la même activité ou Fragment mais pas sur DialogFragment créé séparément.
Peut-être que quelqu'un a déjà répondu de cette façon mais à mon avis, je n'ai pas trouvé et je préfère cette réponse qui fonctionne très bien. Rappelez-vous que setTextColor doit être appliqué après dialog.show(), sinon je ne peux pas le faire.
dialog.show(); //Only after .show() was called
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(neededColor);
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(neededColor);
Non, vous ne pouvez pas changer la couleur, l'image ou le fond des boutons par défaut des boîtes d'alerte. Pour les personnaliser, vous devez créer une boîte de dialogue personnalisée comme celle-ci.
public class TryAgainAlert extends Dialog implements OnClickListener
{
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
Intent i = new Intent(getApplicationContext(), MainMenu.class);
finish();
startActivity(i);
return true;
}
return super.onKeyDown(keyCode, event);
}
TextView scores;
Button tryagain,mainmenu,submit;
public TryAgainAlert(Context context) {
super(context);
setContentView(R.layout.tryagainalert);
scores=(TextView)findViewById(R.id.text);
tryagain= (Button) findViewById(R.id.trya);
mainmenu= (Button) findViewById(R.id.submitscore);
submit= (Button) findViewById(R.id.mainmenu);
}
@Override
public void onClick(View v) {
if(v == tryagain)
{
else if (v==mainmenu)
{
}
else if (v == submit)
{
}
}
}
vous pouvez faire ce que vous voulez avec le fichier XML. J'espère que cela vous aidera. Merci