有虚拟导航键的情况下获取屏幕高度

现在大部分的手机都没有底部虚拟导航键了,但是还是有些手机厂商依然在发布带虚拟导航键的手机,既然有,开发者就得去适配,我遇到比较麻烦的一个问题是获取屏幕(除了虚拟导航键以外的内容显示区域)高度(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的使用还是很有用很强大的。  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容