在我的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();
但问题是我的观点显示如下:
但Dialog
的xml预览如下:
所以,使用上面的代码,我无法调暗背景并保持对主要活动的关注,但是如何使Dialog
出现在应用程序中,就像在xml预览中一样?因为除Dialog
背景外,它不完全在视图的底部。
另外,我如何在对话框中添加onTouchListener
,以便用户只需点击即可将其关闭?
作为奖励,我如何动画Dialog
从下往上显示?
谢谢, 牛顿
编辑#1:
使用标志FLAG_NOT_TOUCH_MODAL在ListView中显示Dialog时可能会出现一些问题,因此请将其更改为FLAG_NOT_FOCUSABLE。
答案 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动作表从底部滑动到中心。