目录
异常1-退出页面未及时关闭对话框
android.view.WindowLeaked: Activity com.example.netlib.activity.DemoHomeActivity has leaked windowDecorView@6891f75[DemoHomeActivity] that was originally added here
相关链接:https://blog.csdn.net/pbm863521/article/details/78656089
- 错误原因
是因为activity中的Dialog、PopupWindow不能脱离activity而单独存在。当Dialog、PopupWindow正在显示的时候而它们依附的activity却destroy了,就会出现WindowLeaked异常。
- 解决办法
在finish 某个activity之前要确保依附于其上的Dialog、PopupWindow已经dismiss了
@Override
protected void onDestroy() {
super.onDestroy();
if(progressDialog!=null&&progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
异常2-设置宽高无效
- 解决办法
方法1:
//设置窗口的大小
dialog.getWindow().setLayout(300, 200);
方法2:
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = 300;
params.height = 200;
dialog.getWindow().setAttributes(params);
方法3:
在根布局套一层布局
- 异常原因
参考我的另一篇文章http://xinyiworld.top/wordpress/?p=4422
因为AlertDialog的view是inflate时并不知道root是哪个,所以根布局的layout会失效。
异常3-Unable to add window -- token null is not valid; is your activity running?
如果就想使用application context来构造Dialog,也是可以的。只需要
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
这样的话就可以在Application里定义一个全局的单例的Dialog用来网络加载了!不必每个页面都要去创建dialog。
异常4-Dialog布局高度被意外的match_parent
问题:
在RelativeLayout里设置android:layout_alignParentBottom="true"
,导致Dialog布局的高度match_parent。
解决方案:使用ConstraintLayout替代RelativeLayout
0 条评论