1、找到这两个数据
1)Rect outRect= new Rect();
h1= ((Activity) mContext).getWindow().getDecorView().getWindowVisibleDisplayFrame(r); 称为WindowVisibleDisplayFrame
2)h2=((Activity) mContext).getWindowManager().getDefaultDisplay().getHeight();称为DefaultDisplay()
outRect.top -> 可视区域顶部的坐标 (也就是状态栏的高度)
outRect.bottom -> 可视区域底部的坐标 (屏幕高度-导航栏-键盘的高度)
通过demo打log,得出h1和h2:
透明状态栏 h1=h2=1812
非透明状态栏 h1=h2=1812
无状态栏(竖屏全屏) h1=h2=1812
有导航栏 h1=h2=1812
无导航栏 h1=h2=1920
有键盘的情况下 h1=1015,h2=1812
综上所述,WindowVisibleDisplayFrame和DefaultDisplay()的测量都包括状态栏但不包括导航栏。二者在键盘弹出的时候是不同的。
查看源码中的解释:
1、WindowVisibleDisplayFrame:
*检索此视图所连接的窗口所在的整体可见显示大小。这考虑了窗口上方的屏幕装饰,适用于窗口本身位于其中或窗口正在放置的情况下
*然后,覆盖的插图用于窗口将其内容定位在其中。实际上,这会告诉您可以放置内容并保持用户可见的可用区域。
2、DefaultDisplay()

*默认显示ID,即内置主显示的id,假设有一个。
也就是与上面的实验一致。我英文不好,凑合看吧。有啥适配问题,及时更新。
网友评论