在 Android 中显示对话框时显示 AppBar

Posted

技术标签:

【中文标题】在 Android 中显示对话框时显示 AppBar【英文标题】:Show AppBar when showing dialog in Android 【发布时间】:2019-11-26 21:29:07 【问题描述】:

我有一个自定义的Dialog,它可以正常工作,但是有没有办法让对话框适应屏幕? 所以可以看到AppBar(下图中的橙色)。而且不会有黑边,这意味着对话框基本上会覆盖整个view,而不是AppBar

我什至想使用 Dialog 执行此操作的原因是因为我在一个活动上有一个表单,当用户想要向该表单添加新内容时,他将不得不打开一个新表单而我不想要丢失最后一个表单上的数据,所以我认为只显示一个对话框是最简单的方法。

【问题讨论】:

【参考方案1】:

您可以按照以下代码设置自定义对话框窗口的重力。

// custom dialog
                final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.custom);
                dialog.setTitle("Title...");

                // set the custom dialog components - text, image and button
                TextView text = (TextView) dialog.findViewById(R.id.text);
                text.setText("android custom dialog example!");
                ImageView image = (ImageView) dialog.findViewById(R.id.image);
                image.setImageResource(R.drawable.ic_launcher_background);

                Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                // if button is clicked, close the custom dialog
                dialogButton.setOnClickListener(new View.OnClickListener() 
                    @Override
                    public void onClick(View v) 
                        dialog.dismiss();
                    
                );

                dialog.show();

                Window window = dialog.getWindow();
                WindowManager.LayoutParams wlp = window.getAttributes();

                wlp.gravity = Gravity.BOTTOM;
                wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
                window.setAttributes(wlp);

请注意:这仅在您的内容不与 AppBar 重叠时才有效。如果您的内容与 AppBar 重叠,则必须检查替代方案。 我建议在这里使用 Fragments。

【讨论】:

这去除了黑色背景,但并没有真正使其与 AppBar 保持一致。 我什至想使用对话框执行此操作的原因是因为我在一个活动上有一个表单,当用户想要向该表单添加新内容时,他将不得不打开一个新表单而且我不想丢失最后一个表单上的数据,所以我认为只显示一个对话框是最简单的方法。

以上是关于在 Android 中显示对话框时显示 AppBar的主要内容,如果未能解决你的问题,请参考以下文章

Android - 仅在 AsyncTask 未完成时单击按钮时显示进度对话框

Android在等待位置时显示进度对话框

当用户在运行时权限对话框上单击拒绝时显示 DialogFragment

从 parse.com 控制台接收推送时显示警报对话框而不是通知

Android - 以编程方式检查互联网连接并在未连接时显示对话框

状态栏处于“通话中”模式时显示模式对话框后导航栏位置错误