diff --git a/android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java b/android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java index 5e0949c5e1f..4ff1f95f8ed 100644 --- a/android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java +++ b/android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java @@ -120,6 +120,7 @@ interface OnModalDismissedListener { setAnimation(screenParams); setStatusBarStyle(screenParams.styleParams); setNavigationBarStyle(screenParams.styleParams); + setDrawUnderStatusBar(screenParams.styleParams); } private void setStatusBarStyle(StyleParams styleParams) { @@ -128,6 +129,12 @@ private void setStatusBarStyle(StyleParams styleParams) { StatusBar.setTextColorScheme(window.getDecorView(), styleParams.statusBarTextColorScheme); } + private void setDrawUnderStatusBar(StyleParams styleParams) { + Window window = getWindow(); + if (window == null) return; + StatusBar.displayOverScreen(window.getDecorView(), styleParams.drawUnderStatusBar); + } + private void setNavigationBarStyle(StyleParams styleParams) { NavigationBar.setColor(getWindow(), styleParams.navigationBarColor); } diff --git a/android/app/src/main/java/com/reactnativenavigation/params/StyleParams.java b/android/app/src/main/java/com/reactnativenavigation/params/StyleParams.java index a09b25af0ed..3c14938a614 100644 --- a/android/app/src/main/java/com/reactnativenavigation/params/StyleParams.java +++ b/android/app/src/main/java/com/reactnativenavigation/params/StyleParams.java @@ -89,6 +89,7 @@ public String toString() { public StatusBarTextColorScheme statusBarTextColorScheme; public Color statusBarColor; public boolean statusBarHidden; + public boolean drawUnderStatusBar; public Color contextualMenuStatusBarColor; public Color contextualMenuButtonsColor; public Color contextualMenuBackgroundColor; diff --git a/android/app/src/main/java/com/reactnativenavigation/params/parsers/StyleParamsParser.java b/android/app/src/main/java/com/reactnativenavigation/params/parsers/StyleParamsParser.java index c4a1eab69c7..b35876e98be 100644 --- a/android/app/src/main/java/com/reactnativenavigation/params/parsers/StyleParamsParser.java +++ b/android/app/src/main/java/com/reactnativenavigation/params/parsers/StyleParamsParser.java @@ -32,6 +32,7 @@ public StyleParams parse() { result.statusBarColor = getColor("statusBarColor", getDefaultStatusBarColor()); result.statusBarHidden = getBoolean("statusBarHidden", getDefaultStatusHidden()); result.statusBarTextColorScheme = StatusBarTextColorScheme.fromString(params.getString("statusBarTextColorScheme"), getDefaultStatusBarTextColorScheme()); + result.drawUnderStatusBar = params.getBoolean("drawUnderStatusBar", getDefaultDrawUnderStatusBar()); result.contextualMenuStatusBarColor = getColor("contextualMenuStatusBarColor", getDefaultContextualMenuStatusBarColor()); result.contextualMenuButtonsColor = getColor("contextualMenuButtonsColor", getDefaultContextualMenuButtonsColor()); result.contextualMenuBackgroundColor = getColor("contextualMenuBackgroundColor", getDefaultContextualMenuBackgroundColor()); @@ -281,6 +282,10 @@ private boolean getDefaultStatusHidden() { return AppStyle.appStyle != null && AppStyle.appStyle.statusBarHidden; } + private boolean getDefaultDrawUnderStatusBar() { + return AppStyle.appStyle != null && AppStyle.appStyle.drawUnderStatusBar; + } + private StyleParams.Font getDefaultBottomTabsFontFamily() { return AppStyle.appStyle == null ? new StyleParams.Font() : AppStyle.appStyle.bottomTabFontFamily; } diff --git a/android/app/src/main/java/com/reactnativenavigation/screens/Screen.java b/android/app/src/main/java/com/reactnativenavigation/screens/Screen.java index 0f8b67882fa..010212e6ad6 100644 --- a/android/app/src/main/java/com/reactnativenavigation/screens/Screen.java +++ b/android/app/src/main/java/com/reactnativenavigation/screens/Screen.java @@ -62,6 +62,7 @@ public Screen(AppCompatActivity activity, ScreenParams screenParams, LeftButtonO createViews(); EventBus.instance.register(this); sharedElements = new SharedElements(); + setDrawUnderStatusBar(styleParams.drawUnderStatusBar); } public void registerSharedElement(SharedElementTransition toView, String key) { @@ -106,6 +107,7 @@ public void setStyle() { setStatusBarHidden(styleParams.statusBarHidden); setStatusBarTextColorScheme(styleParams.statusBarTextColorScheme); setNavigationBarColor(styleParams.navigationBarColor); + setDrawUnderStatusBar(styleParams.drawUnderStatusBar); topBar.setStyle(styleParams); if (styleParams.screenBackgroundColor.hasColor()) { setBackgroundColor(styleParams.screenBackgroundColor.getColor()); @@ -174,6 +176,10 @@ private void setStatusBarHidden(boolean statusBarHidden) { StatusBar.setHidden(((NavigationActivity) activity).getScreenWindow(), statusBarHidden); } + private void setDrawUnderStatusBar(boolean drawUnderStatusBar) { + StatusBar.displayOverScreen(this, drawUnderStatusBar); + } + private void setStatusBarTextColorScheme(StatusBarTextColorScheme textColorScheme) { StatusBar.setTextColorScheme(this, textColorScheme); } diff --git a/android/app/src/main/java/com/reactnativenavigation/utils/StatusBar.java b/android/app/src/main/java/com/reactnativenavigation/utils/StatusBar.java index d5f3f07096b..af907d44bf4 100644 --- a/android/app/src/main/java/com/reactnativenavigation/utils/StatusBar.java +++ b/android/app/src/main/java/com/reactnativenavigation/utils/StatusBar.java @@ -30,6 +30,23 @@ public static void setColor(Window window, StyleParams.Color statusBarColor) { } } + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public static void displayOverScreen(View view, boolean shouldDisplay) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; + + if(shouldDisplay) { + int flags = view.getSystemUiVisibility(); + flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + flags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; + view.setSystemUiVisibility(flags); + } else { + int flags = view.getSystemUiVisibility(); + flags &= ~View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + flags &= ~View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; + view.setSystemUiVisibility(flags); + } + } + @TargetApi(Build.VERSION_CODES.M) public static void setTextColorScheme(View view, StatusBarTextColorScheme textColorScheme) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return; diff --git a/docs/styling-the-navigator.md b/docs/styling-the-navigator.md index e2b5b7cfbba..9888ac1defa 100644 --- a/docs/styling-the-navigator.md +++ b/docs/styling-the-navigator.md @@ -101,6 +101,7 @@ this.props.navigator.setStyle({ navBarButtonFontFamily: 'sans-serif-thin', // Change the font family of textual buttons topBarElevationShadowEnabled: false, // default: true. Disables TopBar elevation shadow on Lolipop and above statusBarColor: '#000000', // change the color of the status bar. + drawUnderStatusBar: false, // default: false, will draw the screen underneath the statusbar. Useful togheter with statusBarColor: transparent collapsingToolBarImage: "http://lorempixel.com/400/200/", // Collapsing Toolbar image. collapsingToolBarImage: require('../../img/topbar.jpg'), // Collapsing Toolbar image. Either use a url or require a local image. collapsingToolBarCollapsedColor: '#0f2362', // Collapsing Toolbar scrim color. diff --git a/src/deprecated/platformSpecificDeprecated.android.js b/src/deprecated/platformSpecificDeprecated.android.js index 4e61ce86de9..c17ef38a0cd 100644 --- a/src/deprecated/platformSpecificDeprecated.android.js +++ b/src/deprecated/platformSpecificDeprecated.android.js @@ -149,6 +149,7 @@ function convertStyleParams(originalStyleObject) { statusBarColor: processColor(originalStyleObject.statusBarColor), statusBarHidden: originalStyleObject.statusBarHidden, statusBarTextColorScheme: originalStyleObject.statusBarTextColorScheme, + drawUnderStatusBar: originalStyleObject.drawUnderStatusBar || false, topBarReactView: originalStyleObject.navBarCustomView, topBarReactViewAlignment: originalStyleObject.navBarComponentAlignment, topBarReactViewInitialProps: originalStyleObject.navBarCustomViewInitialProps,