Je me suis un peu cassé la tête à ce sujet. Ce que je dois faire, c’est changer le style de tous les AlertDialog
s 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:
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:
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.
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>
Vous devez ajouter le style au constructeur de la boîte de dialogue
builder = new AlertDialog.Builder(this, R.style.DialogStyle);
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);
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.
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
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);
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>