diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt index 8cdf8ef8b..f386bc08e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt @@ -6,10 +6,8 @@ import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.SizeTransform import androidx.compose.animation.animateContentSize -import androidx.compose.animation.core.LinearOutSlowInEasing import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateFloatAsState -import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInHorizontally @@ -79,6 +77,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment @@ -101,6 +100,7 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.layout import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection @@ -411,7 +411,13 @@ private fun ReadBookMenuSurface( 560.dp } val isFloating = state.menuConfig.readMenuFloatingBottomBar - val navBarHeight = with(density) { WindowInsets.navigationBars.getBottom(this).toDp() } + val orientation = LocalConfiguration.current.orientation + val currentNavBarHeight = with(density) { WindowInsets.navigationBars.getBottom(this).toDp() } + var lastValidNavBarHeightValue by rememberSaveable(orientation) { mutableFloatStateOf(currentNavBarHeight.value) } + if (currentNavBarHeight.value > 0f && lastValidNavBarHeightValue != currentNavBarHeight.value) { + lastValidNavBarHeightValue = currentNavBarHeight.value + } + val navBarHeight = if (currentNavBarHeight.value > 0f) currentNavBarHeight else lastValidNavBarHeightValue.dp val floatingHorizontalMargin = if (isFloating) 16.dp else 0.dp val floatingBottomMargin = if (isFloating) 16.dp + navBarHeight else 0.dp val mainHorizontalMargin =