getWindowVisibleDisplayFrame与get

2018-12-07  本文已影响0人  呵呵哒hhhh

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

DefaultDisplay()源码解释

 *默认显示ID,即内置主显示的id,假设有一个。

也就是与上面的实验一致。我英文不好,凑合看吧。有啥适配问题,及时更新。

上一篇下一篇

猜你喜欢

热点阅读