web-dev-qa-db-fra.com

La conception des matériaux n'affecte pas les dialogues d'alerte

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

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: enter image description here

450
Gabriele Mariotti

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);
9
Sandeep Kumar

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

4
nadavfima

Vous pourriez utiliser

Bibliothèque de conception de matériel

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

2
Inoy

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.

2
Feng Dai

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.

1
David Vávra

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();
1
CaptRespect