diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/Constants.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/Constants.java index 8af0e081b4..747f46538b 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/Constants.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/Constants.java @@ -7,4 +7,5 @@ public class Constants { public static final String STATUS_BAR_HEIGHT_KEY = "statusBarHeight"; public static final String TOP_BAR_HEIGHT_KEY = "topBarHeight"; public static final String BOTTOM_TABS_HEIGHT_KEY = "bottomTabsHeight"; + public static final String NAVIGATION_BAR_HEIGHT_KEY = "navigationBarHeight"; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java index a34598c665..d6b274c80c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java @@ -96,6 +96,8 @@ private WritableMap createNavigationConstantsMap() { constants.putDouble(Constants.BOTTOM_TABS_HEIGHT_KEY, pxToDp(ctx, UiUtils.getBottomTabsHeight(ctx))); constants.putDouble(Constants.STATUS_BAR_HEIGHT_KEY, pxToDp(ctx, SystemUiUtils.getStatusBarHeight(currentActivity))); constants.putDouble(Constants.TOP_BAR_HEIGHT_KEY, pxToDp(ctx, UiUtils.getTopBarHeight(ctx))); + constants.putDouble(Constants.NAVIGATION_BAR_HEIGHT_KEY, + pxToDp(ctx, UiUtils.getNavigationBarHeight(ctx))); return constants; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java index 3d202ca457..db47373dc7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java @@ -15,9 +15,11 @@ public class UiUtils { private static final int DEFAULT_TOOLBAR_HEIGHT = 56; private static final int DEFAULT_BOTTOM_TABS_HEIGHT = 56; + private static final int DEFAULT_NAVIGATION_BAR_HEIGHT = 0; private static int topBarHeight = -1; private static int bottomTabsHeight = -1; + private static int navigationBarHeight = -1; public static void runOnPreDrawOnce(@Nullable final T view, final Functions.Func1 task) { if (view == null) return; @@ -134,6 +136,17 @@ public static int getBottomTabsHeight(Context context) { return bottomTabsHeight; } + public static int getNavigationBarHeight(Context context) { + if (navigationBarHeight > 0) { + return navigationBarHeight; + } + final Resources resources = context.getResources(); + final int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); + navigationBarHeight = resourceId > 0 ? resources.getDimensionPixelSize(resourceId) + : dpToPx(context, DEFAULT_NAVIGATION_BAR_HEIGHT); + return navigationBarHeight; + } + public static float dpToPx(Context context, float dp) { Resources resources = context.getResources(); return dpToPx(resources.getDisplayMetrics(), dp); diff --git a/lib/ios/Constants.m b/lib/ios/Constants.m index c798bd5ba8..521fd985a9 100644 --- a/lib/ios/Constants.m +++ b/lib/ios/Constants.m @@ -7,7 +7,8 @@ + (NSDictionary *)getConstants { return @{ @"topBarHeight" : @([self topBarHeight]), @"statusBarHeight" : @([self statusBarHeight]), - @"bottomTabsHeight" : @([self bottomTabsHeight]) + @"bottomTabsHeight" : @([self bottomTabsHeight]), + @"navigationBarHeight" : @(0) }; } diff --git a/lib/src/adapters/Constants.ts b/lib/src/adapters/Constants.ts index 7a582e89c9..3a9a370206 100644 --- a/lib/src/adapters/Constants.ts +++ b/lib/src/adapters/Constants.ts @@ -5,6 +5,7 @@ export interface NavigationConstants { backButtonId: string; topBarHeight: number; bottomTabsHeight: number; + navigationBarHeight: number; } export class Constants { @@ -22,11 +23,13 @@ export class Constants { public readonly backButtonId: string; public readonly topBarHeight: number; public readonly bottomTabsHeight: number; + public readonly navigationBarHeight: number; private constructor(constants: NavigationConstants) { this.statusBarHeight = constants.statusBarHeight; this.topBarHeight = constants.topBarHeight; this.backButtonId = constants.backButtonId; this.bottomTabsHeight = constants.bottomTabsHeight; + this.navigationBarHeight = constants.navigationBarHeight; } }