19

我是安卓新手。

目前我想显示一个AlertDialog带有“确定”和“取消”按钮的框。

默认为 PositiveButton: Left, NegativeButton: Right

您能告诉我如何将 PositiveButton 移到右侧并将 NegativeButton 移到左侧吗?

如果我们将文本“OK”更改为 NegativeButton 并将“Cancel”更改为 PositiveButton,如果 Negativebutton 在按下 OK 时发出不好的声音,是否有任何机会/麻烦。

我的代码:

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

谢谢,天使

4

7 回答 7

39

这可能不是一个直接的答案。但只是有关相关主题的一些信息。从谷歌自己论坛的这个帖子中,罗曼人说..

未来正/负按钮的顺序将是 ICS 中使用的按钮。

每个操作系统版本的约定是

  • 在 Honeycomb 之前的设备上,按钮顺序(从左到右)是正 - 中性 - 负。
  • 在使用 Holo 主题的较新设备上,按钮顺序(从左到右)现在是 NEGATIVE - NEUTRAL - POSITIVE。

如果这是 android/Google 想要遵循的约定,那么遵循相同的约定不是更好吗,因为您的用户不会单独使用您的应用程序。毕竟,用户友好性是开发人员首先要寻找的东西。

于 2012-11-30T11:42:07.373 回答
3
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();

但我建议您遵守约定,除非您有充分的理由更改顺序。这将使用户更容易使用您的应用程序。

于 2012-11-30T11:37:54.873 回答
0

这不是最优雅的方式,但它会做你想做的事

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按钮设为负极即可。

于 2012-11-30T11:38:33.553 回答
0

无法更改android中的diffault设置但是您可以将文本ok更改为cancle set the functionally accroding this

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();
于 2012-11-30T11:40:46.263 回答
0

AlertDialog将 按钮移到右侧的一个非常简单的方法是在处理默认布局的核心 XML 中隐藏leftSpacer, a 。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);
于 2017-03-03T09:01:30.070 回答
0

检查这个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);
于 2016-02-10T09:31:05.007 回答
0

neutral button我发现在和之间有一个空间布局,其中按钮-ve/+ve buttons的位置为“1” 。buttonBarLayout

因此,首先我们需要删除该空间或使其可见GONEinvisible让它仍然需要一个空间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);
        }
 });

那么剩下的就是你的设计了,希望对你有帮助

于 2017-03-27T14:49:06.463 回答