有虚拟导航键的情况下获取屏幕高度
2018-08-03 本文已影响0人
伍迪
现在大部分的手机都没有底部虚拟导航键了,但是还是有些手机厂商依然在发布带虚拟导航键的手机,既然有,开发者就得去适配,我遇到比较麻烦的一个问题是获取屏幕(除了虚拟导航键以外的内容显示区域)高度(content),当时想着监听导航键的显示\隐藏。但是没有找到有效的方法。只能转变思路,通过获取content的高度来判断是否有导航键,然后根据content的高度变化来动态计算某些控件的高度。
在此说明一下,通过以下方法在带导航键的手机上是有缺陷的,导航键显示\隐藏获取的高度是不会跟着变化的。
下面贴上我的实现方法:
View decorView = getWindow().getDecorView();
Rect rect =new Rect();
decorView.getWindowVisibleDisplayFrame(rect);
rect.bottom就是content的高度。
通过下面的方法可以获取是否有导航键,包括横屏模式的获取,其中point获取的高度不会随导航键的隐藏显示发生改变,比如1920*1080的手机,point.y永远都是1920,但上面的dm.heightPixels获取的是1920减去导航栏的高度,如果在当前页面把导航栏隐藏了,获取的还是1920减去导航栏的高度,关闭页面再打开获取的就会是1920了,所以说上面的方法有缺陷
decorView的使用还是很有用很强大的。