1、问题描述
上图为手机的虚拟导航栏,手机开启了虚拟导航栏可隐藏功能后,当虚拟导航栏的显示状态发生变化时,屏幕的Width和Height的值(除去虚拟导航栏部分)也会发生变化。此时,如果程序中同时使用了绘图和切图,那么切换状态后,二者的相对位置可能出现偏差,影响界面效果,甚至影响程序的正常功能。
2、解决思路
我们希望当虚拟导航栏的状态发生改变时,自动获取屏幕用于显示区域(除去导航栏)最新的尺寸信息,并刷新界面。
当View的宽高发生了变化,不再适合现在的区域,系统会调用requestLayout方法重新对View布局。onGloableLayout实现了OnGlobalLayoutListener接口,可以监听View宽高的变化。流程图如下图所示(虚拟导航栏缩写为VB,virtual bar):