web-dev-qa-db-fra.com

Android AlertDialog Déplacez PositiveButton à droite et NegativeButton à gauche

Je suis nouveau avec Android.

Actuellement, je souhaite afficher une boîte AlertDialog avec les boutons "OK" et "Annuler".

La valeur par défaut est PositiveButton: Left, NegativeButton: Right.

Pouvez-vous me faire savoir comment puis-je déplacer le bouton positif vers le côté droit et le bouton négatif vers le côté gauche?

Existe-t-il un risque/problème si Negativebutton provoque un son de mauvaise qualité lorsque vous appuyez sur OK, si Nous modifions le texte "OK" en NegativeButton & "Cancel" en PositiveButton.

Mon code:

AlertDialog.Builder builder = new AlertDialog.Builder(SUtils.getContext());
                    builder.setMessage("Confirmation?")
                    .setCancelable(false)
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            //Todo
                            dialog.cancel();
                        }
                    })
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            //TOdo
                        }
                    })

dialog = builder.create();

Merci, Angel

17
user1866128

Cela pourrait ne pas être une réponse directe. Mais juste quelques informations sur un sujet connexe. De this fil dans le propre forum de Google, Romain a dit mec ..

À l'avenir, l'ordre des boutons positifs/négatifs sera celui Utilisé dans le SCI.

et la convention par version du système d'exploitation est

  • Sur les appareils antérieurs à Honeycomb, l'ordre des boutons (de gauche à droite) était de POSITIVE - NEUTRAL - NEGATIVE.
  • Sur les nouveaux appareils utilisant le thème Holo, l'ordre des boutons (de gauche à À droite) est maintenant NÉGATIF ​​- NEUTRE - POSITIF.

S'il s'agit d'une convention qu'Android/Google souhaite suivre, ne faites-vous pas de même, car vos utilisateurs n'utiliseront pas votre application seuls. Après tout, la convivialité est la première chose que recherche un développeur.

36
Krishnabhadra
AlertDialog.Builder builder = new AlertDialog.Builder(SUtils.getContext());
                builder.setMessage("Confirmation?")
                    .setCancelable(false)
                    .setNegativeButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            //TOdo
                        }
                    })
                    .setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            //TOdo
                            dialog.cancel();
                        }
                    })


                diaglog = builder.create();

Mais je vous recommande d’accepter la convention à moins que vous n’ayez une bonne raison de changer l’ordre. Cela facilitera l'utilisation de votre application par les utilisateurs.

3
Caner

Il n’existe aucun moyen de modifier le paramètre par défaut sous Android . Vous pouvez toutefois modifier le texte pour annuler .

AlertDialog.Builder builder = new AlertDialog.Builder(SUtils.getContext());
    builder.setMessage("Confirmation?")
           .setCancelable(false)
           .setNegativeButton("OK", 
               new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                            //TOdo
                        }
                   })
           .setPositiveButton("CANCEL", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                            //TOdo
                            dialog.cancel();
                        }
                    });


dialog = builder.create();
0
Mohd Saleem

vérifier ceci https://github.com/hslls/order-alert-buttons

dependencies {
    compile 'com.github.hslls:order-alert-buttons:1.0.0'
}


AlertDialogParams params = new AlertDialogParams();
params.mTitle = "title";
params.mMessage = "message";
params.mPositiveText = "Ok";
params.mNegativeText = "Cancel";
params.mCancelable = true;
params.mAlign = BUTTON_ALIGN.POSITIVE_BUTTON_LEFT;  // fix button position
params.mClickListener = new AlertDialogClickListener() {
    @Override
    public void onPositiveClicked() {

    }

    @Override
    public void onNegativeClicked() {

    }
};

AlertDialog dialog = AlertDialogBuilder.createAlertDialog(this, params);
0
mapleleaf

J'ai compris qu'il y avait une disposition d'espace entre le neutral button et le -ve/+ve buttons avec la place "1" dans la buttonBarLayout dans laquelle les boutons.

Donc, au début, nous devons supprimer cet espace et/ou rendre sa visibilité GONE (invisible le laissera prendre un espace dans la buttonBarLayout) et nous ferions mieux d'utiliser la méthode onShowListner qu'après avoir montré le dialogue:

 alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button neutralButton = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
            LinearLayout view = (LinearLayout) neutralButtonOrAnyOtherBtnFromThe3Btns.getParent();
            Space space= (Space) view.getChildAt(1);
        }
 });

alors le reste est votre conception, souhait qui aide 

0
Dasser Basyouni

Un moyen très simple de décaler les boutons de la variable AlertDialog vers la droite consiste à masquer la variable leftSpacer, une variable LinearLayout du code XML principal qui gère la présentation par défaut.

// Fetch the PositiveButton
final Button       lPositiveButton = lDialog.getButton(AlertDialog.BUTTON_POSITIVE);
// Fetch the LinearLayout.
final LinearLayout lParent         = (LinearLayout) lPositiveButton.getParent();
// Ensure the Parent of the Buttons aligns it's contents to the right.
lParent.setGravity(Gravity.RIGHT);
// Hide the LeftSpacer. (Strict dependence on the order of the layout!)
lParent.getChildAt(1).setVisibility(View.GONE);
0
Mapsy