web-dev-qa-db-fra.com

Style AlertDialog - Comment changer le style (couleur) du titre, du message, etc.

Je me suis un peu cassé la tête à ce sujet. Ce que je dois faire, c’est changer le style de tous les AlertDialogs de mon Android - l’arrière-plan de la boîte de dialogue doit être blanc et le texte noir]. J'ai essayé de créer beaucoup de styles, de thèmes et d'appliquer à partir du code, du manifeste, etc., mais sans succès en ce qui concerne les couleurs du texte à l'intérieur de AlertDialog. À l'heure actuelle, j'ai le code le plus simple, l'ensemble comme ça:

Manifeste:

<application
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >

styles.xml:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:alertDialogStyle">@style/DialogStyle</item>
</style>

<style name="DialogStyle" parent="@Android:style/Theme.Dialog">
    <!-- changing these background stuff works fine -->
    <item name="Android:bottomBright">@Android:color/white</item>
    <item name="Android:bottomDark">@Android:color/white</item>
    <item name="Android:bottomMedium">@drawable/dialog_footer_bg</item>
    <item name="Android:centerBright">@Android:color/white</item>
    <item name="Android:centerDark">@drawable/dialog_body_bg</item>
    <item name="Android:centerMedium">@Android:color/white</item>
    <item name="Android:fullBright">@color/orange</item>
    <item name="Android:fullDark">@color/orange</item>
    <item name="Android:topBright">@color/green</item>
    <item name="Android:topDark">@drawable/dialog_header_bg</item>

Les éléments énumérés ci-dessous ne fonctionnent pas (veuillez lire les commentaires que j'ai mis au-dessus de chaque élément):

    <!-- panelBackground is not getting set to null, there is something squarish around it -->
    <item name="Android:panelBackground">@null</item>

    <!-- Setting this textColor doesn't seem to have any effect at all. Messages, title, button text color, whatever; nothing changes. -->
    <item name="Android:textColor">#000000</item>

    <!-- Also tried with textAppearance, as follows. Didn't work -->
    <item name="Android:textAppearance">?android:attr/textColorPrimaryInverse</item>

    <!-- Also tried changing textAppearancePrimary, to no avail -->
    <item name="Android:textColorPrimary">#000000</item>

    <!-- Also need to change the dialog title text, tried it as follows, dint work: -->
    <item name="Android:windowTitleStyle">@style/DialogWindowTitle</item>
</style>

Le DialogWindowTitle est défini comme suit:

<style name="DialogWindowTitle">
    <item name="Android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
</style>

Donc, aucun de ceux-ci ne fonctionne. Quelqu'un peut-il me dire ce que je pourrais faire de mal et comment puis-je:

  1. Changer la couleur du texte pour les messages (texte du contenu)
  2. Changer la couleur du texte du titre
  3. Enlevez le fond du panneau

Remarque: je dois prendre en charge l’API 8 (2.2) à la hausse. En outre, j'ai parcouru la plupart des questions connexes ici, ainsi que les groupes Google, mais je ne peux pas comprendre, même si j'ai l'impression que c'est juste sous mon nez!

Edit: ajout d'une capture d'écran:

AlertDialog not themed as expected

40
Aswin Kumar

Vous devez définir un thème pour votre AlertDialog et le référencer dans le thème de votre activité. L'attribut est alertDialogTheme et non pas alertDialogStyle. Comme ça:

<style name="Theme.YourTheme" parent="@Android:style/Theme.Holo">
    ...
    <item name="Android:alertDialogTheme">@style/YourAlertDialogTheme</item>
</style>

<style name="YourAlertDialogTheme">
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowIsFloating">true</item>
    <item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
    <item name="Android:windowMinWidthMajor">@Android:dimen/dialog_min_width_major</item>
    <item name="Android:windowMinWidthMinor">@Android:dimen/dialog_min_width_minor</item>
    <item name="Android:windowTitleStyle">...</item>
    <item name="Android:textAppearanceMedium">...</item>
    <item name="Android:borderlessButtonStyle">...</item>
    <item name="Android:buttonBarStyle">...</item>
</style>

Vous serez en mesure de changer la couleur et l'apparence du texte pour le titre, le message et vous aurez un contrôle sur l'arrière-plan de chaque zone. J'ai écrit un article de blog détaillant les étapes pour le style d'un AlertDialog.

48
David Ferrand

supprime l'arrière-plan du pannea

 <item name="Android:windowBackground">@color/transparent_color</item> 
 <color name="transparent_color">#00000000</color>

C'est mon style:

 <style name="ThemeDialogCustom">
    <item name="Android:windowFrame">@null</item>
    <item name="Android:windowIsFloating">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
    <item name="Android:windowBackground">@color/transparent_color</item>
    <item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="Android:colorBackgroundCacheHint">@null</item>
</style>

Ce que j'ai ajouté au constructeur.

Ajouter textColor:

<item name="Android:textColor">#ff0000</item>
14
Terril Thomas

Vous devez ajouter le style au constructeur de la boîte de dialogue

builder = new AlertDialog.Builder(this, R.style.DialogStyle);
8
general03

Voici mon code pour thème la boîte de dialogue d'alerte:

<style name="alertDialog" parent="Theme.AppCompat.Dialog.Alert">
    <item name="Android:background">@color/light_button_text_color</item>
    <item name="Android:textColor">@Android:color/black</item>
    <item name="Android:textColorPrimary">@Android:color/black</item>
    <item name="Android:textColorSecondary">@Android:color/black</item>
    <item name="Android:titleTextColor" tools:targetApi="m">@Android:color/black</item>
</style>

Placez ce code dans styles.xml. Dans votre Java, appliquez ce thème comme suit:

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.alertDialog);

sortie du code

8
Anuj Gupta

J'ai changé de couleur par programme de cette manière:

var builder = new AlertDialog.Builder (this);
...
...
...
var dialog = builder.Show ();
int textColorId = Resources.GetIdentifier ("alertTitle", "id", "Android");
TextView textColor = dialog.FindViewById<TextView> (textColorId);
textColor?.SetTextColor (Color.DarkRed);

en tant que alertTitle, vous pouvez modifier d'autres données de cette manière (l'exemple suivant concerne pour titleDivider):

int titleDividerId = Resources.GetIdentifier ("titleDivider", "id", "Android");
View titleDivider = dialog.FindViewById (titleDividerId);
titleDivider?.SetBackgroundColor (Color.Red);

c'est en C #, mais dans Java c'est la même chose.

5
StefanoM5

Cela dépend dans quelle mesure vous souhaitez personnaliser la boîte de dialogue d'alerte. J'ai différentes étapes afin de personnaliser le dialogue d'alerte. Veuillez visiter: https://stackoverflow.com/a/33439849/5475941

enter image description hereenter image description hereenter image description hereenter image description here

2
Vahid

En vous appuyant sur la réponse de @ general03, vous pouvez utiliser le style intégré d'Android pour personnaliser rapidement la boîte de dialogue. Vous pouvez trouver les thèmes de dialogue sous Android.R.style.Theme_DeviceDefault_Dialogxxx.

Par exemple:

builder = new AlertDialog.Builder(this, Android.R.style.Theme_DeviceDefault_Dialog_MinWidth);
builder = new AlertDialog.Builder(this, Android.R.style.Theme_DeviceDefault_Dialog_NoActionBar);
builder = new AlertDialog.Builder(this, Android.R.style.Theme_DeviceDefault_DialogWhenLarge);
2
Jeshurun

Utilisez ceci dans votre style dans votre values-v21/style.xml

<style name="AlertDialogCustom" parent="@Android:style/Theme.Material.Dialog.NoActionBar">
        <item name="Android:windowBackground">@Android:color/white</item>
        <item name="Android:windowActionBar">false</item>
        <item name="Android:colorAccent">@color/cbt_ui_primary_dark</item>
        <item name="Android:windowTitleStyle">@style/DialogWindowTitle.Sphinx</item>
        <item name="Android:textColorPrimary">@color/cbt_hints_color</item>
        <item name="Android:backgroundDimEnabled">true</item>
        <item name="Android:windowMinWidthMajor">@Android:dimen/dialog_min_width_major</item>
        <item name="Android:windowMinWidthMinor">@Android:dimen/dialog_min_width_minor</item>
</style>

Et pour les appareils pré-Lollipop, mettez-le dans values ​​/ style.xml

<style name="AlertDialogCustom" parent="@Android:style/Theme.Material.Dialog.NoActionBar">
        <item name="Android:windowBackground">@Android:color/white</item>
        <item name="Android:windowActionBar">false</item>
        <item name="Android:colorAccent">@color/cbt_ui_primary_dark</item>
        <item name="Android:windowTitleStyle">@style/DialogWindowTitle.Sphinx</item>
        <item name="Android:textColorPrimary">@color/cbt_hints_color</item>
        <item name="Android:backgroundDimEnabled">true</item>
        <item name="Android:windowMinWidthMajor">@Android:dimen/dialog_min_width_major</item>
        <item name="Android:windowMinWidthMinor">@Android:dimen/dialog_min_width_minor</item>
</style>

<style name="DialogWindowTitle.Sphinx" parent="@style/DialogWindowTitle_Holo">
       <item name="Android:textAppearance">@style/TextAppearance.Sphinx.DialogWindowTitle</item>
</style>

<style name="TextAppearance.Sphinx.DialogWindowTitle" parent="@Android:style/TextAppearance.Holo.DialogWindowTitle">
        <item name="Android:textColor">@color/dark</item>
        <!--<item name="Android:fontFamily">sans-serif-condensed</item>-->
        <item name="Android:textStyle">bold</item>
</style>
1
msmukesh4