From 91697c0a1d8e4f1e8745ec857ddc960de906e79c Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Mon, 27 Oct 2025 12:21:13 +0100 Subject: [PATCH 1/5] tabBarHidden support for Android --- .../main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt | 4 ++++ .../rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt | 4 +++- .../swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt index ca1dfe7a54..eeabd86761 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt @@ -193,6 +193,10 @@ class TabsHost( updateNavigationMenuIfNeeded(oldValue, newValue) } + var tabBarHidden: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + updateNavigationMenuIfNeeded(oldValue, newValue) + } + private fun updateNavigationMenuIfNeeded( oldValue: T, newValue: T, diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt index 75e0918790..6f11913e77 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.res.ColorStateList import android.util.TypedValue import android.view.MenuItem +import android.view.View.GONE +import android.view.View.VISIBLE import android.view.ViewGroup import android.widget.TextView import androidx.appcompat.view.ContextThemeWrapper @@ -26,7 +28,7 @@ class TabsHostAppearanceApplicator( } fun updateSharedAppearance(tabsHost: TabsHost) { - bottomNavigationView.isVisible = true + bottomNavigationView.isVisible = !tabsHost.tabBarHidden bottomNavigationView.setBackgroundColor( tabsHost.tabBarBackgroundColor ?: resolveColorAttr(com.google.android.material.R.attr.colorSurfaceContainer), diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt index d700255473..c8f3a820fe 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt @@ -142,10 +142,13 @@ class TabsHostViewManager : value: String?, ) = Unit + @ReactProp(name = "tabBarHidden") override fun setTabBarHidden( view: TabsHost, value: Boolean, - ) = Unit + ) { + view.tabBarHidden = value + } // Android additional From 49b5a4e60210f72386a9e188260efeb32e0cfbe6 Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Mon, 27 Oct 2025 12:24:49 +0100 Subject: [PATCH 2/5] update docs --- src/components/bottom-tabs/BottomTabs.types.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/components/bottom-tabs/BottomTabs.types.ts b/src/components/bottom-tabs/BottomTabs.types.ts index 4dae7493ee..4668bd484f 100644 --- a/src/components/bottom-tabs/BottomTabs.types.ts +++ b/src/components/bottom-tabs/BottomTabs.types.ts @@ -38,6 +38,15 @@ export interface BottomTabsProps extends ViewProps { ) => void; // #endregion Events + // #region General + /** + * @summary Hides the tab bar. + * + * @default false + */ + tabBarHidden?: boolean; + // #endregion General + // #region Android-only appearance /** * @summary Specifies the background color for the entire tab bar. @@ -204,14 +213,6 @@ export interface BottomTabsProps extends ViewProps { * @supported iOS 18 or higher */ tabBarControllerMode?: TabBarControllerMode; - /** - * @summary Hides the tab bar. - * - * @default false - * - * @platform ios - */ - tabBarHidden?: boolean; // #endregion iOS-only appearance // #region Experimental support From 77b3e75c5194968ba817ab439c47ab5461c342fc Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Mon, 27 Oct 2025 12:46:38 +0100 Subject: [PATCH 3/5] update interface insets on visibility change --- .../com/swmansion/rnscreens/gamma/tabs/TabsHost.kt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt index eeabd86761..96bdd5b1c6 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt @@ -194,6 +194,7 @@ class TabsHost( } var tabBarHidden: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + updateInterfaceInsets() updateNavigationMenuIfNeeded(oldValue, newValue) } @@ -495,9 +496,15 @@ class TabsHost( val newHeight = bottom - top if (newHeight != oldHeight) { - interfaceInsetsChangeListener?.apply { - this.onInterfaceInsetsChange(EdgeInsets(0.0f, 0.0f, 0.0f, newHeight.toFloat())) - } + updateInterfaceInsets(newHeight) + } + } + + private fun updateInterfaceInsets(newHeight: Int? = null) { + val height = if (tabBarHidden) 0 else (newHeight ?: bottomNavigationView.height) + + interfaceInsetsChangeListener?.apply { + this.onInterfaceInsetsChange(EdgeInsets(0.0f, 0.0f, 0.0f, height.toFloat())) } } From 0551d1b052d364073dcea7ac1f1e716dc1de85d1 Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Mon, 27 Oct 2025 14:45:09 +0100 Subject: [PATCH 4/5] remove unused imports --- .../rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt index 6f11913e77..0f9fc4eda8 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt @@ -4,8 +4,6 @@ import android.annotation.SuppressLint import android.content.res.ColorStateList import android.util.TypedValue import android.view.MenuItem -import android.view.View.GONE -import android.view.View.VISIBLE import android.view.ViewGroup import android.widget.TextView import androidx.appcompat.view.ContextThemeWrapper From abe20064383870695ddfcdeffd47016362ffd2fc Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Mon, 3 Nov 2025 09:29:50 +0100 Subject: [PATCH 5/5] check if prop value has changed --- .../java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt index 96bdd5b1c6..74afd09c03 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt @@ -194,8 +194,10 @@ class TabsHost( } var tabBarHidden: Boolean by Delegates.observable(false) { _, oldValue, newValue -> - updateInterfaceInsets() - updateNavigationMenuIfNeeded(oldValue, newValue) + if (newValue != oldValue) { + updateInterfaceInsets() + updateNavigationMenuIfNeeded(oldValue, newValue) + } } private fun updateNavigationMenuIfNeeded(