J'ai mis à jour mon téléphone vers Android 6.0 et j'ai ces 2 problèmes de dialogues:
1) Le titre est affiché mais les messages ne sont pas destinés au dialogue d'alerte (RESOLU):
new AlertDialog.Builder(context).setTitle("Title").setMessage("Message");
2) De plus, le titre du fragment de boîte de dialogue personnalisé n'est pas affiché (NON RÉSOLU):
getDialog().setTitle("Title");
Il n'y avait pas un tel problème dans Lollipop ou dans les versions antérieures, le problème est apparu seulement après la mise à jour de mon téléphone vers Marshmallow.
Comment résoudre le problème?
Utilisez constructeur avec thème pour Lollipop et les nouvelles versions d'Android:
Thème sombre
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
builder = new AlertDialog.Builder(context, Android.R.style.Theme_Material_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(context);
}
Et pour Thème lumière
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
builder = new AlertDialog.Builder(context, Android.R.style.Theme_Material_Light_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(context);
}
Je suis tombé sur quelques réponses qui indiquent que vous devez utiliser les éléments suivants dans le thème de votre application:
<item name="Android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Bien que cela soit correct, cela ne fonctionnait pas partout pour moi. Finalement, j'ai réalisé que dans certains endroits, j'utilisais le générateur AlertDialog standard et dans d'autres, j'utilisais le générateur de support. Si vous utilisez le support AlertDialog, veillez également à inclure les éléments suivants dans votre thème:
<item name="alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Il suffit de mettre cela dans votre fichier de styles dans votre balise de style de thème de base et vous êtes prêt à partir
<item name="Android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
Répondre pour 2)
, nous devons appeler setStyle()
avant onCreateDialog()
car theme
est utilisé dans onCreateDialog()
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
setStyle(STYLE_NORMAL, Android.R.style.Theme_Material_Light_Dialog_Alert);
}
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setTitle(R.string.dialog_title);
return dialog;
}
j'ai essayé de résoudre ce problème en créant mon propre style.
votre objet de dialogue devrait être comme ceci et votre style pointé sur ce dialogue sera écrit ci-dessous
new AlertDialog.Builder(new ContextThemeWrapper(Context, R.style.Dialog))
.setTitle("Title")
.setMessage("Sample Message ...").show();
R.style.Dialog ::
<style name="Dialog">
<item name="Android:textColorPrimary">@color/primary_text</item>
<item name="Android:textColor">@color/primary_color</item>
</style>
Couleurs ::
<color name="primary_text">#212121</color>
<color name="primary_color">#2196f3</color>
enfin, la sortie devrait être quelque chose comme ça
Note: "Android: textColorPrimary" va pour le dialogue setMessage et "Android: textColor" va pour le dialogue setTitle; Je n'utilise ni bouton ni écouteur setPositive et setNegative dans mon objet de dialogue, mais vous pouvez les voir dans l'image si vous le souhaitez, vous pouvez créer votre propre objet de dialogue.
new AlertDialog.Builder(context)
.setTitle("Delete entry")
.setMessage("Are you sure you want to delete this entry?")
.setPositiveButton(Android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
})
.setNegativeButton(Android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
})
.setIcon(Android.R.drawable.ic_dialog_alert)
.show();
J'espère que ceci vous aidera.............
Je soupçonne que vous finissez par montrer du texte blanc sur un fond blanc! (En regardant la capture d'écran, l'icône (i) ne s'affiche pas bien non plus, ce qui suggère qu'elle a été conçue pour être affichée sur un fond autre que le blanc.
Vous pouvez utiliser le constructeur public AlertDialog.Builder (Context context, int themeResId)
pour vous assurer que vous utilisez un thème spécifique pour styliser votre boîte de dialogue, où Theme_Material_Dialog
est probablement ce que vous voulez.
Peut-être que la couleur principale de votre texte est la même que la couleur d’arrière-plan de la boîte de dialogue. Dans ce cas, utilisez dans votre styles.xml (juste un exemple):
<style name="AlertDialog" parent="@Android:style/Theme.Material.Light.Dialog.Alert">
<item name="Android:textColor">#000000</item>
</style>
et dans la création de dialogue:
new AlertDialog.Builder(
new ContextThemeWrapper(getContext(), R.style.AlertDialog))
).setMessage("test");
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_fire_missiles)
.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// FIRE ZE MISSILES!
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
Une fois vérifier cet espoir cela fonctionnera .......
Dans mon cas, tous les dialogues avaient la même couleur que les polices (titre et message). Ce que j'ai fait pour corriger cet état était le changement de l'attribut color dans mon thème. J'ai copié le fichier de thème XML dans le fichier 'res/values-v22' et ai défini une couleur différente pour Marshmallow.
<resources>
<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="Android:textColorPrimary">@Android:color/tertiary_text_dark</item>
</style>
</resources>
ou seulement pour les dialogues
<resources>
<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="Android:alertDialogTheme">@style/LywAlertDialogStyle</item>
</style>
<style name="LywAlertDialogStyle" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
<item name="Android:textColorPrimary">@color/lyw_secondary_text_color</item>
</style>
</resources>
Lorsque vous utilisez DialogFragment
, vous devez
Ajouter du style
<style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog">
<item name="Android:windowNoTitle">false</item>
</style>
Dans votre DialogFragment
ajouter getTheme
public class CustomDialogFragment extends DialogFragment{
public int getTheme() {
return R.style.CustomDialogFragment;
}
.
.
.
Et c'est tout!