最近公司的项目中,需要判断出当前的虚拟导航栏NavigationBar是否存在,以及获取虚拟导航栏的高度。在网上查找了很多资料,比较靠谱的是以下方法(需要当前界面的视图被绘制完成后调用):
/**
* 检测底部虚拟导航栏是否存在
* @return
*/
public static boolean isNavigationBarExist(){
ViewGroup vp = (ViewGroup) CommonUtils.curActivity.getWindow().getDecorView();
if (vp != null) {
for (int i = 0; i < vp.getChildCount(); i++) {
vp.getChildAt(i).getContext().getPackageName();
if (vp.getChildAt(i).getId() != View.NO_ID
&& "navigationBarBackground".equals(CommonUtils.curActivity.getResources().getResourceEntryName(vp.getChildAt(i).getId()))) {
return true;
}
}
}
return false;
}
但是在某些机型上,比如公司的一台三星 Android 10.0以上