android - 没有焦点的自定义对话框

标签 android android-activity dialog

在我的 Android 应用程序中,我想在任何 Activity 之上显示一个 View ,并且仍将焦点放在该 Activity 上。我实际上使用 Dialog 和下面的代码解决了这个问题:

Dialog progressDialog = new Dialog(getThisContext());
progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
progressDialog.setContentView(R.layout.hint_view_layout);

TextView theText = (TextView) progressDialog.findViewById(R.id.hintText);
theText.setText("(Some Text)");

Window window = progressDialog.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
window.setGravity(Gravity.BOTTOM);
progressDialog.show();

但问题是我的 View 显示如下:

Showing up as

但是我的 Dialog 的 xml 预览如下:

xml preview

因此,通过上面的代码,我能够不使背景变暗并保持主要 Activity 的焦点,但是如何使 Dialog 出现在应用程序中,就像在 xml 中一样预览?因为除了 Dialog 背景之外,它并不完全位于 View 的底部。 另外,我如何将 onTouchListener 添加到对话框中,以便用户只需单击即可将其关闭? 作为奖励,我如何使 Dialog 动画化以从下往上显示?

谢谢, 牛顿

编辑#1:

在 ListView 中显示对话框时,使用标志 FLAG_NOT_TOUCH_MODAL 可能会导致一些问题,因此请将其更改为 FLAG_NOT_FOCUSABLE。

最佳答案

问题有点多,我先回答第一个问题:

Dialog progressDialog = new Dialog(getThisContext());
progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
progressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); //You have to put your background window transparent. 
progressDialog.setContentView(R.layout.hint_view_layout);

第二个,底部重力:

WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;

第三个(触摸外部取消):

progressDialog.setCanceledOnTouchOutside(true);

此外,如果您设置了标志然后清除了标志,则它们将不会被设置。

第四个问题(底部动画):

看看this回答,我可以看到您是一名 iOS 开发人员,所以这就像 iOS 操作表从底部滑动到中心一样。

关于android - 没有焦点的自定义对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568637/

相关文章:

java - 为什么我的 Android 应用程序会定期崩溃?

java - Intent 的 extra 始终为 null

jQuery mobile 和弹出对话框

android - 如何更改 Android 警报对话框的背景?

android - 如何使用 Dagger @Inject 到 Kotlin Builder 类中

android - 将 facebook 和 google 集成到同一个应用程序中,并允许用户同时登录

java - 如何使textview可以从一个LinearLayout拖动到另一个LinearLayout?

java - 设置形状颜色的不透明度

android - 在后台通过 setContentView 加载布局时显示对话框

android - 如何使 PreferenceActivity 启动对话框以设置自定义首选项