diff --git a/app/src/main/java/io/legado/app/ui/book/read/sheet/HeaderFooterPage.kt b/app/src/main/java/io/legado/app/ui/book/read/sheet/HeaderFooterPage.kt index 0919bcdba..e66a520cd 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/sheet/HeaderFooterPage.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/sheet/HeaderFooterPage.kt @@ -87,6 +87,7 @@ internal fun HeaderFooterPage( ) val pagerState = rememberPagerState(pageCount = { 3 }) var selectedTab by remember { mutableIntStateOf(0) } + var clickScrollCount by remember { mutableIntStateOf(0) } val pageHeights = remember { mutableStateMapOf() } val animatedHeight by rememberPagerAnimatedHeight(pagerState, pageHeights) @@ -183,7 +184,11 @@ internal fun HeaderFooterPage( } LaunchedEffect(pagerState) { - snapshotFlow { pagerState.settledPage }.collect { selectedTab = it } + snapshotFlow { pagerState.currentPage }.collect { page -> + if (clickScrollCount == 0) { + selectedTab = page + } + } } Column( @@ -195,11 +200,16 @@ internal fun HeaderFooterPage( selectedTabIndex = selectedTab, onTabSelected = { index -> selectedTab = index + clickScrollCount++ scope.launch { - pagerState.animateScrollToPage( - page = index, - animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing) - ) + try { + pagerState.animateScrollToPage( + page = index, + animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing) + ) + } finally { + clickScrollCount = (clickScrollCount - 1).coerceAtLeast(0) + } } }, modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 8.dp), diff --git a/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt b/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt index 080c231a1..7fb7c4e8e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt @@ -108,6 +108,7 @@ internal fun SystemMenuPage( val scope = rememberCoroutineScope() val pagerState = rememberPagerState(pageCount = { 3 }) var selectedTab by remember { mutableIntStateOf(0) } + var clickScrollCount by remember { mutableIntStateOf(0) } val pageHeights = remember { mutableStateMapOf() } val animatedHeight by rememberPagerAnimatedHeight(pagerState, pageHeights) @@ -119,7 +120,11 @@ internal fun SystemMenuPage( var showIconSheet by remember { mutableStateOf(false) } LaunchedEffect(pagerState) { - snapshotFlow { pagerState.settledPage }.collect { selectedTab = it } + snapshotFlow { pagerState.currentPage }.collect { page -> + if (clickScrollCount == 0) { + selectedTab = page + } + } } Column( @@ -135,11 +140,16 @@ internal fun SystemMenuPage( selectedTabIndex = selectedTab, onTabSelected = { index -> selectedTab = index + clickScrollCount++ scope.launch { - pagerState.animateScrollToPage( - page = index, - animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing) - ) + try { + pagerState.animateScrollToPage( + page = index, + animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing) + ) + } finally { + clickScrollCount = (clickScrollCount - 1).coerceAtLeast(0) + } } }, modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 8.dp), diff --git a/app/src/main/java/io/legado/app/ui/book/read/sheet/TextTitleSheet.kt b/app/src/main/java/io/legado/app/ui/book/read/sheet/TextTitleSheet.kt index 0e9117661..74bfa829a 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/sheet/TextTitleSheet.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/sheet/TextTitleSheet.kt @@ -79,9 +79,14 @@ fun ReadStyleTextTitleContent( ) val pagerState = rememberPagerState(pageCount = { 3 }) var selectedTab by remember { mutableIntStateOf(0) } + var clickScrollCount by remember { mutableIntStateOf(0) } LaunchedEffect(pagerState) { - snapshotFlow { pagerState.settledPage }.collect { selectedTab = it } + snapshotFlow { pagerState.currentPage }.collect { page -> + if (clickScrollCount == 0) { + selectedTab = page + } + } } ReadStyleTextTitleContent( @@ -95,11 +100,16 @@ fun ReadStyleTextTitleContent( onOpenTitleFontSelect = onOpenTitleFontSelect, animateToPage = { page -> selectedTab = page + clickScrollCount++ scope.launch { - pagerState.animateScrollToPage( - page = page, - animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing) - ) + try { + pagerState.animateScrollToPage( + page = page, + animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing) + ) + } finally { + clickScrollCount = (clickScrollCount - 1).coerceAtLeast(0) + } } }, modifier = modifier, @@ -144,25 +154,28 @@ internal fun ReadStyleTextTitleContent( .clipToBounds() .pagerHeight(animatedHeight), ) { page -> - val pageModifier = Modifier.onSizeChanged { size -> - pageHeights[page] = size.height - } - when (page) { - 0 -> TextEffectsPage( - onOpenShadowSet = onOpenShadowSet, - onOpenUnderlineConfig = onOpenUnderlineConfig, - onOpenHighlightRule = onOpenHighlightRule, - onOpenFontSelect = onOpenFontSelect, - modifier = pageModifier, - onIntent = onIntent, - ) + Box( + modifier = Modifier + .fillMaxWidth() + .onSizeChanged { size -> + pageHeights[page] = size.height + } + ) { + when (page) { + 0 -> TextEffectsPage( + onOpenShadowSet = onOpenShadowSet, + onOpenUnderlineConfig = onOpenUnderlineConfig, + onOpenHighlightRule = onOpenHighlightRule, + onOpenFontSelect = onOpenFontSelect, + onIntent = onIntent, + ) - 1 -> LayoutSpacingPage(modifier = pageModifier, onIntent = onIntent) - 2 -> TitleSettingsPage( - onOpenTitleFontSelect = onOpenTitleFontSelect, - modifier = pageModifier, - onIntent = onIntent, - ) + 1 -> LayoutSpacingPage(onIntent = onIntent) + 2 -> TitleSettingsPage( + onOpenTitleFontSelect = onOpenTitleFontSelect, + onIntent = onIntent, + ) + } } } } @@ -181,11 +194,10 @@ internal fun LayoutSpacingPage( var indentCount by remember { mutableIntStateOf(ReadBookConfig.paragraphIndent.length) } Column( - modifier = Modifier + modifier = modifier .fillMaxWidth() .padding(horizontal = 16.dp) - .verticalScroll(rememberScrollState()) - .then(modifier), + .verticalScroll(rememberScrollState()), ) { Text( text = stringResource(R.string.read_config_body_spacing), @@ -255,11 +267,10 @@ internal fun TextEffectsPage( var colorPickerInitial by remember { mutableIntStateOf(0) } Column( - modifier = Modifier + modifier = modifier .fillMaxWidth() .padding(horizontal = 16.dp) - .verticalScroll(rememberScrollState()) - .then(modifier), + .verticalScroll(rememberScrollState()), ) { Text( text = stringResource(R.string.text_typeface), @@ -421,11 +432,10 @@ internal fun TitleSettingsPage( ) Column( - modifier = Modifier + modifier = modifier .fillMaxWidth() .padding(horizontal = 16.dp) - .verticalScroll(rememberScrollState()) - .then(modifier), + .verticalScroll(rememberScrollState()), ) { TinyDropdownSettingItem( title = stringResource(R.string.body_title),