带有文本、复选框和2个按钮的警报对话框

9

我有一个要求,需要弹出类似EULA屏幕的警告对话框。 其中将有描述EULA的文本,带有“不再显示”复选框,并在最后放置2个按钮,分别为“确定”和“取消”。

如何将文本视图和复选框作为警告对话框的一部分呢?


3
EULA永远不会有“不再显示”之类的选项。 底部仅提供同意和不同意按钮。在程序的某个菜单中放置EULA的链接,以便用户随时查看。 - Mudassir
此外,如果这不是最佳的 EULA 设计解决方案,则可能需要用于其他对话框,这些对话框可以选择执行进一步操作。 - Treviño
2个回答

16

我必须同意Mudassir的观点,EULA不应该有“不再显示”复选框,但是下面是您可以实现类似功能的方法。

您可以使用AlertDialog.Builder来构建包含视图(您可以在XML中设计)的对话框。以下是一个示例:

AlertDialog.Builder eulaBuilder = new AlertDialog.Builder(this);
            LayoutInflater eulaInflater = LayoutInflater.from(this);
            View eulaLayout = eulaInflater.inflate(R.layout.eula, null);
            eulaBuilder.setView(eulaLayout);
            Checkbox dontShowAgain = (CheckBox)eulaLayout.findViewById(R.id.dontShowAgain);
            eulaBuilder.setPositiveButton("Agree", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface d, int m) {
                    // Do something
                }
            });        
            eulaBuilder.setNegativeButton("Disagree", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface d, int m) {
                    // Do something
                }
            });
            eulaMsg = eulaBuilder.create();

您可以创建一个只包含一个CheckBox对象的XML文件。然后将该视图添加到AlertDialog.Builder中。使用AlertDialog.Builder.setMessage("EULA message here")来设置您的最终用户许可协议消息。


我认为这个解决方案缺少一行代码 eulaBuilder.setView(eulaLayout); - Juhani

3

请看下这两种不同的方法:

1) 第一种方法更简单且非常快速:

CheckBox checkBox = new CheckBox(this);
checkBox.setText("This is your checkbox message");
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setLayoutParams( new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
                        LinearLayout.LayoutParams.FILL_PARENT));
linearLayout.setOrientation(1);     
linearLayout.addView(checkBox);

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setView(linearLayout);
alertDialogBuilder.setTitle("This is the title of alert dialog");
alertDialogBuilder.setMessage("This is the message of alert dialog");
alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface arg0, int arg1) {
          // do something
     }
});
alertDialogBuilder.show();

2) 第二种方法,具有更自定义的布局:

看这个页面,这里还有创建复选框的XML代码。


已经过去了很长时间,但你还记得在第一个方法中如何获取AlertDialog内复选框的值吗? - Ignacio Rubio
你可以在“onClick”中使用复选框(先前标记为final)。因此,“isChecked()”方法可用且正常运行!谢谢! - Ignacio Rubio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接