在我的 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 显示如下:
但是我的 Dialog
的 xml 预览如下:
因此,通过上面的代码,我能够不使背景变暗并保持主要 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/