fix:潜在的布局高度测量缺陷与优化建议
This commit is contained in:
@@ -140,7 +140,11 @@ fun ReadStyleContent(
|
|||||||
|
|
||||||
internal fun Modifier.pagerHeight(height: Dp) = this.layout { measurable, constraints ->
|
internal fun Modifier.pagerHeight(height: Dp) = this.layout { measurable, constraints ->
|
||||||
val placeable = measurable.measure(constraints)
|
val placeable = measurable.measure(constraints)
|
||||||
val layoutHeight = if (height != Dp.Unspecified) height.roundToPx() else placeable.height
|
val layoutHeight = if (height != Dp.Unspecified) {
|
||||||
|
height.roundToPx().coerceIn(constraints.minHeight, constraints.maxHeight)
|
||||||
|
} else {
|
||||||
|
placeable.height
|
||||||
|
}
|
||||||
layout(placeable.width, layoutHeight) {
|
layout(placeable.width, layoutHeight) {
|
||||||
placeable.placeRelative(0, 0)
|
placeable.placeRelative(0, 0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ fun ReadStyleTextTitleContent(
|
|||||||
var selectedTab by remember { mutableIntStateOf(0) }
|
var selectedTab by remember { mutableIntStateOf(0) }
|
||||||
|
|
||||||
LaunchedEffect(pagerState) {
|
LaunchedEffect(pagerState) {
|
||||||
snapshotFlow { pagerState.currentPage }.collect { selectedTab = it }
|
snapshotFlow { pagerState.settledPage }.collect { selectedTab = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadStyleTextTitleContent(
|
ReadStyleTextTitleContent(
|
||||||
@@ -92,6 +92,7 @@ fun ReadStyleTextTitleContent(
|
|||||||
onOpenHighlightRule = onOpenHighlightRule,
|
onOpenHighlightRule = onOpenHighlightRule,
|
||||||
onOpenFontSelect = onOpenFontSelect,
|
onOpenFontSelect = onOpenFontSelect,
|
||||||
animateToPage = { page ->
|
animateToPage = { page ->
|
||||||
|
selectedTab = page
|
||||||
scope.launch {
|
scope.launch {
|
||||||
pagerState.animateScrollToPage(
|
pagerState.animateScrollToPage(
|
||||||
page = page,
|
page = page,
|
||||||
@@ -140,25 +141,21 @@ internal fun ReadStyleTextTitleContent(
|
|||||||
.clipToBounds()
|
.clipToBounds()
|
||||||
.pagerHeight(animatedHeight),
|
.pagerHeight(animatedHeight),
|
||||||
) { page ->
|
) { page ->
|
||||||
Box(
|
val pageModifier = Modifier.onSizeChanged { size ->
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.onSizeChanged { size ->
|
|
||||||
pageHeights[page] = size.height
|
pageHeights[page] = size.height
|
||||||
}
|
}
|
||||||
) {
|
|
||||||
when (page) {
|
when (page) {
|
||||||
0 -> TextEffectsPage(
|
0 -> TextEffectsPage(
|
||||||
onOpenShadowSet = onOpenShadowSet,
|
onOpenShadowSet = onOpenShadowSet,
|
||||||
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
||||||
onOpenHighlightRule = onOpenHighlightRule,
|
onOpenHighlightRule = onOpenHighlightRule,
|
||||||
onOpenFontSelect = onOpenFontSelect,
|
onOpenFontSelect = onOpenFontSelect,
|
||||||
|
modifier = pageModifier,
|
||||||
onIntent = onIntent,
|
onIntent = onIntent,
|
||||||
)
|
)
|
||||||
|
|
||||||
1 -> LayoutSpacingPage(onIntent = onIntent)
|
1 -> LayoutSpacingPage(modifier = pageModifier, onIntent = onIntent)
|
||||||
2 -> TitleSettingsPage(onIntent = onIntent)
|
2 -> TitleSettingsPage(modifier = pageModifier, onIntent = onIntent)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -168,6 +165,7 @@ internal fun ReadStyleTextTitleContent(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun LayoutSpacingPage(
|
internal fun LayoutSpacingPage(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
onIntent: (ReadBookIntent) -> Unit,
|
onIntent: (ReadBookIntent) -> Unit,
|
||||||
) {
|
) {
|
||||||
var letterSpacing by remember { mutableFloatStateOf(ReadBookConfig.letterSpacing) }
|
var letterSpacing by remember { mutableFloatStateOf(ReadBookConfig.letterSpacing) }
|
||||||
@@ -179,7 +177,8 @@ internal fun LayoutSpacingPage(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
.verticalScroll(rememberScrollState()),
|
.verticalScroll(rememberScrollState())
|
||||||
|
.then(modifier),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.read_config_body_spacing),
|
text = stringResource(R.string.read_config_body_spacing),
|
||||||
@@ -238,6 +237,7 @@ internal fun TextEffectsPage(
|
|||||||
onOpenUnderlineConfig: () -> Unit,
|
onOpenUnderlineConfig: () -> Unit,
|
||||||
onOpenHighlightRule: () -> Unit,
|
onOpenHighlightRule: () -> Unit,
|
||||||
onOpenFontSelect: () -> Unit,
|
onOpenFontSelect: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
onIntent: (ReadBookIntent) -> Unit,
|
onIntent: (ReadBookIntent) -> Unit,
|
||||||
) {
|
) {
|
||||||
var textItalic by remember { mutableStateOf(ReadBookConfig.textItalic) }
|
var textItalic by remember { mutableStateOf(ReadBookConfig.textItalic) }
|
||||||
@@ -251,7 +251,8 @@ internal fun TextEffectsPage(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
.verticalScroll(rememberScrollState()),
|
.verticalScroll(rememberScrollState())
|
||||||
|
.then(modifier),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.text_typeface),
|
text = stringResource(R.string.text_typeface),
|
||||||
@@ -386,6 +387,7 @@ internal fun TextEffectsPage(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun TitleSettingsPage(
|
internal fun TitleSettingsPage(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
onIntent: (ReadBookIntent) -> Unit,
|
onIntent: (ReadBookIntent) -> Unit,
|
||||||
) {
|
) {
|
||||||
var titleMode by remember(ReadBookConfig.titleMode) { mutableIntStateOf(ReadBookConfig.titleMode) }
|
var titleMode by remember(ReadBookConfig.titleMode) { mutableIntStateOf(ReadBookConfig.titleMode) }
|
||||||
@@ -411,7 +413,8 @@ internal fun TitleSettingsPage(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
.verticalScroll(rememberScrollState()),
|
.verticalScroll(rememberScrollState())
|
||||||
|
.then(modifier),
|
||||||
) {
|
) {
|
||||||
TinyDropdownSettingItem(
|
TinyDropdownSettingItem(
|
||||||
title = stringResource(R.string.body_title),
|
title = stringResource(R.string.body_title),
|
||||||
|
|||||||
Reference in New Issue
Block a user