安卓全面屏手机获取虚拟导航栏高度
问题:之前做过各种导航栏的适配,这次在适配RN的虚拟导航栏时会出现闪一下的问题,问题虽然不大但是看上去不是十分美观。
解决方法:在安卓端获取虚拟导航栏高度,在RN添加同等高度的透明view于页面底部。
代码:
/*** 获取导航栏高度** @param context* @return*/public int getNavigationHeight(Context context) {int windowheight = getWindowManager().getDefaultDisplay().getHeight(); //获取无导航栏状态栏时窗口高度Log.d("无导航栏状态栏时窗口高度", String.valueOf(windowheight));int fullheigh = 0; //窗口总高度Display display = getWindowManager().getDefaultDisplay();DisplayMetrics dm = new DisplayMetrics();@SuppressWarnings("rawtypes")Class klass;try {klass = Class.forName("android.view.Display");@SuppressWarnings("unchecked")Method method = klass.getMethod("getRealMetrics", DisplayMetrics.class);method.invoke(display, dm);fullheigh = dm.heightPixels; //获取窗口总高度} catch (Exception e) {e.printStackTrace();}Log.d("有导航栏状态栏时窗口高度", String.valueOf(fullheigh));if (windowheight == fullheigh) return 0; //无虚拟导航栏存在Log.d("栏状态栏高度", String.valueOf(getStatusBarHeight(context)));return fullheigh - windowheight - getStatusBarHeight(context); //导航栏高度}
/*** 获取状态栏高度** @param context* @return*/public static int getStatusBarHeight(Context context) {Resources resources = context.getResources();int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");int height = resources.getDimensionPixelSize(resourceId);return height;}
总结:利用手机屏幕高度差来获取虚拟导航栏高度。