web-dev-qa-db-fra.com

Le dialogue ne montre pas le bouton positif et négatif

J'ai utilisé AlertDialog pour alerter l'utilisateur confirmer la suppression. Je vérifie sur mon appareil (Android 5.1) et il montre bien

 enter image description here

Mais sur un autre appareil (également sous Android 5.1), la boîte de dialogue manquait les boutons positif et négatif.

 enter image description here

J'ai vérifié et constaté que les périphériques rencontrés avaient ce problème avec une résolution moyenne (960x540, 854x480). 

La résolution est-elle liée à ce problème? Si non, pouvez-vous me dire pourquoi et comment résoudre ce problème?

Mon code pour le dialogue d'affichage:

    public static final Dialog yesNoDialog(Context context,
                                               String message,
                                               DialogInterface.OnClickListener yesAction, DialogInterface.OnClickListener noAction) {


            AlertDialog.Builder  builder = new AlertDialog.Builder(context,R.style.todoDialogLight);

            builder.setTitle(context.getString(R.string.app_name))
                    .setMessage(message)
                    .setCancelable(false)
                    .setPositiveButton("YES", yesAction)
                    .setNegativeButton("NO", noAction);
            return builder.create();
 }

And styles.xml

  <style name="todoDialogLight" parent="Theme.AppCompat.Light.Dialog">

            <!-- Used for the buttons -->
            <item name="colorAccent">@color/colorPrimaryDark</item>
            <item name="Android:textStyle">bold</item>
            <!-- Used for the title and text -->
            <item name="Android:textColorPrimary">@color/colorText</item>
            <!-- Used for the background -->
            <!-- <item name="Android:background">#4CAF50</item>-->
            <item name="Android:fontFamily">sans-serif</item>
            <item      name="Android:windowAnimationStyle">@style/RemindDialogAnimation</item>
            <item name="Android:layout_width">@dimen/width_remind_dialog</item>
            <item name="Android:layout_height">wrap_content</item>
 </style>
19
CauCuKien

Alors les boutons sont là pour moi. Malheureusement, ils étaient en texte blanc sur fond blanc. Cela n'a rien à voir avec la résolution, mais plutôt avec le thème que vous choisissez. Pour résoudre ce problème, vous devez définir la bonne couleur de texte dans le thème de votre dialogue.

Par exemple, dans styles.xml, ajoutez

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorPrimary">@color/colorPrimaryDarkBlue</item>
</style>

et dans votre activité, ajoutez

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MyActivity.this, R.style.MyDialogTheme);

J'espère que cela t'aides.

32
Ali

Ajoutez ceci dans style.xml: 

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="Android:textColor">@color/colorAccent</item>
</style>

et en activité

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MyActivity.this, R.style.MyDialogTheme);
5
Pavan

La solution d'Ali a fonctionné pour moi. Mon code original fonctionnait sur les versions précédentes d'Android <7. Mais tester sur mon pixel a donné des boutons invisibles. J'ai ajouté le concept de style détaillé par ALi comme indiqué ci-dessous et tout va bien:

   return new AlertDialog.Builder(getActivity(),R.style.MyDialogTheme)
            .setView(v)
            .setTitle(R.string.filter_picker_title)
            .setPositiveButton(Android.R.string.ok,
                    // when the user presses the button to select a new number
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            Integer markerIndex = mNumberPicker.getValue();
                            stringFilter=uniqueValues[markerIndex];
                            sendResult(Activity.RESULT_OK,  stringFilter);
                        }
                    })
            .create();
3
T_Dun

Si vous utilisez un thème personnalisé dans votre styles.xml, définissez la couleur de colorAccent sur une couleur plus sombre.

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimary</item>
        <item name="colorAccent">@color/colorPrimary</item>
    </style>
1
TharakaNirmana

Dialogue dialogue;

public void startAlertDialog(String message)
{
    AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);


    alertDialog.setCancelable(false);

    LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
    View view=inflater.inflate(R.layout.alertdialoglayout,null);
    TextViewRagular textViewRagular=(TextViewRagular)view.findViewById(R.id.textviewMessage);
    textViewRagular.setText(message);
    alertDialog.setView(view);
    dialog=alertDialog.create();
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}
0
kiran nanda

C'est vraiment lié à la résolution, je ne sais pas exactement la raison et juste faire une condition if else pour résoudre ce problème.

public static String getDensity(Context context) {
        float density = context.getResources().getDisplayMetrics().density;
        if (density >= 4.0) {
            return "xxxhdpi";
        }
        if (density >= 3.0) {
            return "xxhdpi";
        }
        if (density >= 2.0) {
            return "xhdpi";
        }
        if (density >= 1.5) {
            return "hdpi";
        }
        if (density >= 1.0) {
            return "mdpi";
        }
        return "ldpi";
}

AlertDialog

    public static Dialog yesNoDialog(final Context context,
                                               final String message,
                                               final DialogInterface.OnClickListener yesAction,
                                               final DialogInterface.OnClickListener noAction) {
            int theme = PreferenceUtil.getThemeSetting(context, PreferenceUtil.PREF_THEME);
            AlertDialog.Builder builder = null;
            String density = AppUtil.getDensity(context);
            if (theme == ThemeUtil.THEME_LIGHT) {
                if(density.equals("hdpi")){
                    builder = new AlertDialog.Builder(context);
                }else{
                    builder = new AlertDialog.Builder(context, R.style.todoDialogLight);
                }
            } else {
                if(density.equals("hdpi")){
                    builder = new AlertDialog.Builder(context);
                }else{
                    builder = new AlertDialog.Builder(context, R.style.todoDialogDark);
                }
            }
            builder.setTitle(context.getString(R.string.app_name))
                    .setMessage(message)
                    .setCancelable(false)
                    .setPositiveButton("YES", yesAction)
                    .setNegativeButton("NO", noAction);
            return builder.create();
   }

J'espère que cela aidera les autres développeurs qui ont le même problème.

0
CauCuKien