Style AlertDialog - comment changer le style (la couleur) du titre, message, etc

je me casse la tête à cause de ça. Ce que je dois faire est, changer le style de tous AlertDialogdans mon application android - dialogue de fond doit être blanc-ish, et le texte doit être black-ish. J'ai essayé de créer beaucoup de styles, de thèmes, et d'appliquer à partir du code, manifeste, etc, mais pas de succès, en ce qui concerne les couleurs du texte à l'intérieur du AlertDialog. Pour l'instant, j'ai les codes les plus simples, ceci:

manifeste:

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

les 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 (lisez les commentaires, 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 rien de tout cela ne fonctionne. Quelqu'un peut me dire ce que j'ai pu faire de mal, et comment je peux:

  1. modifier le texte de la couleur pour les messages de contenu (texte)
  2. Modifier le titre la couleur du texte
  3. Supprimer l' panneau de fond

Note: j'ai besoin de soutien API 8 (2.2) vers le haut. En outre, j'ai passé en revue la plupart de la question connexe ici, et google Groupes, mais ne peut pas comprendre, bien que j'ai une sensation de son droit sous mon nez!

Edit: ajouter screenshot:

AlertDialog not themed as expected

36
demandé sur Aswin Kumar 2013-04-24 23:50:18

8 réponses

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

<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 certain contrôle sur l'arrière-plan de chaque zone. J'ai écrit un blog détaillant les étapes de style D'un AlertDialog.

43
répondu David Ferrand 2014-07-03 17:35:05

Retirez le panneau d'arrière-plan

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

C'est Mystyle:

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

que j'ai ajouté au constructeur.

ajouter textColor:

<item name="android:textColor">#ff0000</item>
14
répondu Terril Thomas 2013-11-05 08:53:43

vous devez ajouter le style au constructeur du dialogue

builder = new AlertDialog.Builder(this, R.style.DialogStyle);
8
répondu general03 2013-11-05 08:40:15

j'ai changé de couleur de façon programmatique :

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);
int titleDividerId = Resources.GetIdentifier ("titleDivider", "id", "android");
View titleDivider = dialog.FindViewById (titleDividerId);
titleDivider?.SetBackgroundColor (Color.Red);

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

5
répondu StefanoM5 2016-08-25 10:02:52

Voici mon Code pour le thème de la boîte de dialogue 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 appliquer ce thème comme:

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

Sortie du code

4
répondu Anuj Gupta 2017-09-27 08:36:08

en S'appuyant sur la réponse de @general03, vous pouvez utiliser le style intégré D'Android pour personnaliser le dialogue rapidement. 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
répondu Jeshurun 2015-04-24 05:40:24

Ça dépend de combien vous voulez personnaliser la boîte de dialogue d'alerte. J'ai différentes étapes pour personnaliser la boîte de dialogue Alerte. Veuillez visiter le site: https://stackoverflow.com/a/33439849/5475941

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

2
répondu Vahid 2017-05-23 12:03:08

utilisez ceci dans votre Style dans votre valeurs-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 périphériques pré lollipop mettez-le dans valeurs/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
répondu msmukesh4 2017-01-10 11:16:59