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 AlertDialog
dans 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:
- modifier le texte de la couleur pour les messages de contenu (texte)
- Modifier le titre la couleur du texte
- 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:
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.
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>
vous devez ajouter le style au constructeur du dialogue
builder = new AlertDialog.Builder(this, R.style.DialogStyle);
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.
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);
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);
Ç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
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>