Android AlertDialog Перемещение PositiveButton вправо и NegativeButton слева

Я новичок в Android.

В настоящее время я хочу показать окно AlertDialog с кнопками "ОК" и "Отмена".

По умолчанию PositiveButton: Left, NegativeButton: Right

Можете ли вы сообщить мне, как я могу поместить PositiveButton в правую сторону и NegativeButton влево?

Есть ли шанс/проблема, если Negativebutton вызывает плохой звук при нажатии OK, если мы меняем текст "OK" на NegativeButton и "Cancel" на PositiveButton.

Мой код:

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();

Спасибо, Angel

Ответ 1

Это может быть не прямой ответ. Но только некоторая информация по смежной теме. От этот поток в собственном форуме Google, сказал Ромен.

В порядке продвижения порядок положительных/отрицательных кнопок будет используется в ICS.

и соглашение для каждой версии ОС

  • На устройствах до сотового устройства порядок кнопок (слева направо) ПОЗИТИВНО - НЕЙТРАЛЬНО - НЕГАТИВНО.
  • На новых устройствах, использующих тему Голо, порядок кнопок (слева right) теперь НЕГАТИВНО - НЕЙТРАЛЬНО - ПОЗИТИВНО.

Если это соглашение, этот андроид /Google хочет следовать, не лучше ли вам следовать за тем же, так как ваши пользователи не будут использовать ваше приложение в одиночку. В конце концов, удобство для пользователя - это первое, что ищет разработчик.

Ответ 2

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();

Но я рекомендую согласиться с конвенцией, если у вас нет веских оснований для изменения порядка. Это облегчит пользователям использование вашего приложения.

Ответ 3

Невозможно изменить настройку diffault в android Но вы можете изменить текст ok до cancle установите функционально аккрецию этого

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();

Ответ 4

проверьте 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);

Ответ 5

На самом деле простой способ переместить кнопки AlertDialog в правую сторону - это скрыть leftSpacer, a LinearLayout внутри основного XML, который обрабатывает макет по умолчанию.

// 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 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);

Ответ 6

Я выяснил, что между neutral button и -ve/+ve buttons есть место размещения с местом "1" в buttonBarLayout, в котором находятся кнопки.

Итак, сначала нам нужно удалить это пространство и сделать видимость GONE (invisible позволит ему по-прежнему занимать пробел в buttonBarLayout), и нам лучше использовать метод onShowListner лучше, чем это делать после показывая диалог:

 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);
        }
 });

тогда остальное - ваш дизайн, пожелайте, чтобы это помогло

Ответ 7

Это не самый элегантный способ, но он сделает то, что вы хотите

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
                        dialog.cancel();
                    }
                })
                .setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        //TOdo
                    }
                })


            diaglog = builder.create();

Просто сделайте кнопку Cancel положительной, а кнопку Ok - отрицательной.