自定义对话框没有焦点

时间:2013-10-24 14:23:40

标签: android android-activity dialog

在我的Android应用中,我希望在任何活动的基础上显示视图,并且仍然关注活动。我实际上使用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();

但问题是我的观点显示如下:

Showing up as

Dialog的xml预览如下:

xml preview

所以,使用上面的代码,我无法调暗背景并保持对主要活动的关注,但是如何使Dialog出现在应用程序中,就像在xml预览中一样?因为除Dialog背景外,它不完全在视图的底部。 另外,我如何在对话框中添加onTouchListener,以便用户只需点击即可将其关闭? 作为奖励,我如何动画Dialog从下往上显示?

谢谢, 牛顿

编辑#1:

使用标志FLAG_NOT_TOUCH_MODAL在ListView中显示Dialog时可能会出现一些问题,因此请将其更改为FLAG_NOT_FOCUSABLE。

1 个答案:

答案 0 :(得分:5)

这是很多问题,我会回答第一个问题:

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动作表从底部滑动到中心。