web-dev-qa-db-ja.com

Android AlertDialog PositiveButtonを右に移動し、NegativeButtonを左に移動します

私はAndroidを初めて使用します。

現在、「OK」ボタンと「キャンセル」ボタンのあるAlertDialogボックスを表示したいと思います。

デフォルトはPositiveButton:Left、NegativeButton:Rightです。

PositiveButtonを右側に移動し、NegativeButtonを左側に移動する方法を教えてください。

テキスト「OK」をNegativeButtonに、「Cancel」をPositiveButtonに変更した場合、OKを押したときにNegativebuttonが悪い音を出す可能性/問題はありますか?.

私のコード:

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

ありがとう、エンジェル

17
user1866128

これは直接的な答えではないかもしれません。しかし、関連するトピックに関する情報がいくつかあります。 this Google自身のフォーラムのスレッドから、Romainの男は言った。

今後は、正/負のボタンの順序がICSで使用されるようになります。

oSバージョンごとの規則は

  • Honeycombより前のデバイスでは、ボタンの順序(左から右)はPOSITIVE-NEUTRAL-NEGATIVEでした。
  • Holoテーマを使用する新しいデバイスでは、ボタンの順序(左から右)がNEGATIVE-NEUTRAL-POSITIVEになりました。

Android/Googleが従うことを望んでいるのが慣例である場合、ユーザーがアプリを単独で使用することはないので、同じに従うほうがよいのではないでしょうか。結局のところ、開発者が最初に探すのは使いやすさです。

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

ただし、順序を変更する正当な理由がない限り、規則に従うことをお勧めします。これにより、ユーザーはアプリケーションを使いやすくなります。

3
Caner

Android)のデフォルト設定を変更する方法はありませんが、これに従って機能的に設定をキャンセルするようにテキストを変更することはできます

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

これを確認してください 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

neutral button-ve/+ve buttonsの間にスペースレイアウトがあり、ボタンがあるbuttonBarLayoutの場所が「1」であることがわかりました。

したがって、最初にそのスペースを削除するか、その可視性を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);
        }
 });

残りはあなたのデザインです、それが助けになることを願っています

0
Dasser Basyouni

AlertDialogのボタンを右側に移動する非常に簡単な方法は、デフォルトのレイアウトを処理するコアXML内のleftSpacerであるLinearLayoutを非表示にすることです。

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