2

在我的 Android 应用程序中,我想在任何 Activity 之上显示一个视图,并且仍然专注于该 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();

但问题是我的视图显示如下:

显示为

但是我的 xml 的预览Dialog是这样的:

xml 预览

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

谢谢,牛顿

编辑#1:

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

4

1 回答 1

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);

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

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

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

于 2013-10-24T14:32:58.343 回答