【问题标题】:Custom Dialog without focus没有焦点的自定义对话框
【发布时间】:2013-10-24 14:23:39
【问题描述】:

在我的 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();

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

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

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

谢谢, 牛顿

编辑#1:

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

【问题讨论】:

    标签: android android-activity dialog


    【解决方案1】:

    问题很多,我先回答一下:

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

    【讨论】:

    • 我能够用您的代码清除背景并将其置于底部,谢谢,但 setCanceledOnTouchOutside 不起作用.. 可能是因为 FLAG_NOT_TOUCH_MODAL。此外,我清除的标志是 FLAG_DIM_BEHIND,而不是我之前添加的标志。是的,我是一名深入研究 Android 的 iOS 开发人员。:P。将看看动画!
    • 你必须接受牛顿的标志,抱歉没有写完。你必须在谷歌兄弟上搜索这个东西。
    • 嘿,动画效果太棒了,谢谢!而且我还尝试删除 FLAG_NOT_TOUCH_MODAL 标志,现在当我触摸窗口中的任何位置时它会取消,但随后我失去了对主要活动的关注..单击它时应该关闭对话框..无论如何都很好;)
    • 刚刚想通了..我只是在主RelativeLayout中添加了一个id,然后我设置了一个onTouchListener,这样它就会取消对话框..!!
    • lembra-te de protegeres a opção do Dialog não se encontrar à vista if(progressDialog.isShowing) ;)
    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 2016-09-09
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多