J'ai ajouté la conception de matériau appCompat à mon application et il semble que les boîtes de dialogue d'alerte n'utilisent pas mes couleurs primaires, primaires, foncées ou accentuées.
Voici mon style de base:
<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/apptheme_color</item>
<item name="colorPrimaryDark">@color/apptheme_color_dark</item>
<item name="colorAccent">@color/apptheme_color</item>
<item name="Android:textColorPrimary">@color/action_bar_gray</item>
</style>
D'après ce que j'ai compris, le texte du bouton dialogues devrait également utiliser ces couleurs. Ai-je tort sur ma compréhension ou y a-t-il quelque chose de plus que je doive faire?
Solution:
La réponse marquée m'a mis sur la bonne voie.
<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/apptheme_color</item>
<item name="colorPrimaryDark">@color/apptheme_color_dark</item>
<item name="colorAccent">@color/apptheme_color</item>
<item name="Android:actionModeBackground">@color/apptheme_color_dark</item>
<item name="Android:textColorPrimary">@color/action_bar_gray</item>
<item name="sdlDialogStyle">@style/DialogStyleLight</item>
<item name="Android:seekBarStyle">@style/SeekBarNavyTheme</item>
</style>
<style name="StyledDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="colorPrimary">@color/apptheme_color</item>
<item name="colorPrimaryDark">@color/apptheme_color_dark</item>
<item name="colorAccent">@color/apptheme_color</item>
</style>
MISE À JOUR LE Août 2019 AVEC Les composants matériels de la bibliothèque Android:
Avec la nouvelle composants matériels de la bibliothèque Android, bibliothèque , vous pouvez utiliser la nouvelle androidx.appcompat.app.AlertDialog
.
Il suffit d'utiliser quelque chose comme:
_new MaterialAlertDialogBuilder(context)
.setTitle("Dialog")
.setMessage("Lorem ipsum dolor ....")
.setPositiveButton("Ok", /* listener = */ null)
.setNegativeButton("Cancel", /* listener = */ null)
.show();
_
Vous pouvez utiliser dans votre thème quelque chose comme:
_ <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
...
<item name="materialAlertDialogTheme">@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog</item>
</style>
_
Vous pouvez également utiliser le constructeur:
_new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog)
_
AVEC BIBLIOTHÈQUE D'APPUI:
Avec le nouveau _AppCompat v22.1
_, vous pouvez utiliser le nouveau Android.support.v7.app.AlertDialog .
Utilisez simplement un code comme celui-ci:
_import Android.support.v7.app.AlertDialog
AlertDialog.Builder builder =
new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
builder.setTitle("Dialog");
builder.setMessage("Lorem ipsum dolor ....");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
_
Et utilisez un style comme celui-ci:
_<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">#FFCC00</item>
<item name="Android:textColorPrimary">#FFFFFF</item>
<item name="Android:background">#5fa3d0</item>
</style>
_
Sinon, vous pouvez définir dans votre thème actuel:
_<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- your style -->
<item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>
_
et ensuite dans votre code:
_ import Android.support.v7.app.AlertDialog
AlertDialog.Builder builder =
new AlertDialog.Builder(this);
_
Voici le AlertDialog sur KitKat:
lors de l'initialisation du générateur de dialogue, transmettez le deuxième paramètre en tant que thème. Il montrera automatiquement la conception du matériau avec le niveau 21 de l’API.
AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);
ou,
AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
AppCompat ne fait pas cela pour les dialogues (pas encore au moins)
EDIT: c'est le cas maintenant. assurez-vous d'utiliser Android.support.v7.app.AlertDialog
Vous pourriez utiliser
Bibliothèque de conception de matériel créée pour de jolis dialogues d'alerte , des boutons et d'autres éléments comme barres de collation. Actuellement, il est fortement développé.
Guide, code, exemple - https://github.com/navasmdc/MaterialDesignLibrary
Guide comment ajouter une bibliothèque à Android Studio 1.0 - Comment importer une bibliothèque de conception de matériau dans Android Studio?
.
Bonne codage;)
Vous pouvez envisager ce projet: https://github.com/fengdai/AlertDialogPro
Il peut vous fournir des boîtes de dialogue d'alerte par thème matériel presque identiques à celles de Lollipop. Compatible avec Android 2.1.
Essayez cette bibliothèque:
https://github.com/avast/Android-styled-dialogs
Il est basé sur DialogFragments
au lieu de AlertDialogs
(comme celui de @afollestad). Le principal avantage: les dialogues ne disparaissent pas après la rotation et les rappels fonctionnent toujours.
Pour une raison quelconque, Android: textColor semble seulement mettre à jour la couleur du titre. Vous pouvez changer la couleur du texte du message en utilisant un
SpannableString.AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.MyDialogTheme));
AlertDialog dialog = builder.create();
Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
dialog.setMessage(wordtoSpan);
dialog.show();