Android 自定义无焦点对话框

Android 自定义无焦点对话框,android,android-activity,dialog,Android,Android Activity,Dialog,在我的Android应用程序中,我想在任何活动的顶部显示一个视图,并且仍然关注该活动。实际上,我是通过一个对话框和下面的代码来解决这个问题的: Dialog progressDialog = new Dialog(getThisContext()); progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); progressDialog.setContentView(R.layout.hint_view_layout); Tex

在我的Android应用程序中,我想在任何活动的顶部显示一个视图,并且仍然关注该活动。实际上,我是通过一个
对话框
和下面的代码来解决这个问题的:

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();
但问题是,我的观点如下:

但是
对话框
的xml预览如下所示:

因此,有了上面的代码,我就能够不模糊背景,保持主要活动的焦点,但我如何才能使
对话框像在xml预览中一样出现在应用程序中?因为除了
对话框
背景之外,它并不完全位于视图的底部。 另外,我如何在对话框中添加一个
onTouchListener
,以便用户只需单击即可取消它? 作为奖励,我如何设置
对话框
的动画,使其自下而上显示

谢谢, 牛顿

编辑#1:


在列表视图中显示对话框时,使用flag\u NOT\u TOUCH\u模式可能会导致一些问题,因此将其改为flag\u NOT\u 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;
第三个(触摸外部时取消):

此外,如果设置了标志,然后清除了标志,则不会设置这些标志

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


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

我可以用你的代码清除背景,也可以将其放在底部,谢谢,但是SetCanceledOnTouchOut不起作用。。也许是因为国旗的缘故。此外,我清除的标志是后面的标志,而不是我之前添加的标志。是的,我是一名深入安卓系统的iOS开发者P.将观看动画!你必须带上tose flags Newton,很抱歉没有全部写下来。你必须在谷歌兄弟上搜索这些东西。嘿,动画非常棒,谢谢!我还试着移除了“不触摸模式”标志,现在当我触摸窗口中的任何地方时,它会取消,但随后我在主要活动中失去了焦点。。在对话框中单击时应将其关闭。。不管怎么说,答案不错;)我刚想出来。。我只是在主RelativeLayout中添加了一个id,然后设置了一个onTouchListener,这样它就可以取消对话框了。。!!如果(progressDialog.isShowing)
,则保护操作对话
progressDialog.setCanceledOnTouchOutside(true);