Android - Can't dismiss dialog on android Q

网上搜了很多答案,比如handle内存泄漏,dialog点击了多次之类的,对我来说都不适用,于是有了以下的解决方案。但是其中原由我还没弄清楚,如果看过这篇文章的人了解,请告诉我,谢谢!Better togeter!

1. 我的dialog是全屏显示的,在android 10以下的手机上都是可以dismiss成功的,但是就是在android 10上不成功,dismiss代码明明执行成功了就是不消失,怀疑是源码里执行到某一步直接return了,还没来得及使窗口关闭。所以把全屏功能关闭就可以了。

final Dialog dialog = new Dialog(activity);
// final Dialog dialog = new Dialog(activity,android.R.style.Theme_Translucent_NoTitleBar); //全屏显示
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //正常显示
dialog.setCancelable(false);

2. 如果有需求必须要全屏显示,那么可以换一种方式实现全屏。

final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.test_dialog);
//设置全屏
Window window = dialog.getWindow();
window.getDecorView().setPadding(0, 0, 0, 0);
window.setGravity(Gravity.CENTER);
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(lp);        

  

posted @ 2019-09-18 16:42  我是个神经病  阅读(311)  评论(3)    收藏  举报