J'essaie de migrer de la configuration par défaut Android AlertDialog
vers la nouvelle version incluse dans appCompat-22.1. Jusqu'à présent, je comprends qu'il vous suffit d'importer le package Android.support.v7.app.AlertDialog
pour l'utiliser.
Mais comment puis-je le nommer? Par exemple, changez la couleur du bouton positif/négatif, la couleur du titre, la couleur du message et la couleur de l’arrière-plan?
Lors de la création de la AlertDialog
, vous pouvez définir un thème à utiliser.
Exemple - Création du dialogue
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
styles.xml - Style personnalisé
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="Android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="Android:background">#4CAF50</item>
</style>
Résultat
Éditer
Pour modifier l’apparence du titre, vous pouvez procéder comme suit. Ajoutez d'abord un nouveau style:
<style name="MyTitleTextStyle">
<item name="Android:textColor">#FFEB3B</item>
<item name="Android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>
ensuite, il vous suffit de référencer ce style dans votre MyAlertDialogStyle
:
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
...
<item name="Android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>
De cette façon, vous pouvez définir un autre textColor
pour le message via Android:textColorPrimary
et un autre pour le titre via le style.
Pour utiliser un thème pour toute l'application et ne pas utiliser le second paramètre pour styler votre boîte de dialogue
<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
<item name="alertDialogTheme">@style/dialog</item>
<item name="colorAccent">@color/accent</item>
</style>
<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/accent</item>
</style>
Sur mon application utilisant un accent de couleur dans le thème ne montre pas les boutons de alertDialog avec le thème colorAccent Je dois ajouter un style de dialogue dans le thème.
Si vous souhaitez utiliser le nouveau Android.support.v7.app.AlertDialog et avoir des couleurs différentes pour les boutons et également une présentation personnalisée, consultez ma https://Gist.github.com/JoachimR/6bfbc175d5c8116d411e
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.custom_layout, null);
initDialogUi(v);
final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
.setTitle(getString(R.string.some_dialog_title))
.setCancelable(true)
.setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
doSomething();
dismiss();
}
})
.setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
})
.setView(v)
.create();
// change color of positive button
d.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
b.setTextColor(getResources().getColor(R.color.colorPrimary));
}
});
return d;
}
Suivez la réponse de @reVerse mais dans mon cas, j'avais déjà quelques propriétés dans mon AppTheme
like
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="Android:textColor">#111</item>
<item name="Android:textSize">13sp</item>
</style>
Donc, mon dialogue va ressembler
Je l'ai résolu par
1) Modifiez l'importation de Android.app.AlertDialog
en Android.support.v7.app.AlertDialog
2) Je remplace la propriété 2 dans AppTheme
avec une valeur nulle
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="Android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="Android:background">#4CAF50</item>
<item name="Android:textColor">@null</item>
<item name="Android:textSize">@null</item>
</style>
.
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);
J'espère que ça aidera un autre peuple