From ad29e5aad2c4cc2460da5d89d224445a40e833d9 Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Fri, 19 Jun 2026 00:14:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E6=9C=AA=E5=AE=9A=E4=BD=8D=E5=88=B0=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E9=98=85=E8=AF=BB=E4=BD=8D=E7=BD=AE=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E7=94=A8=20layoutResult=20=E6=BB=9A=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/book/read/sheet/ContentEditSheet.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/read/sheet/ContentEditSheet.kt b/app/src/main/java/io/legado/app/ui/book/read/sheet/ContentEditSheet.kt index 78983e74a..cd2d2341d 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/sheet/ContentEditSheet.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/sheet/ContentEditSheet.kt @@ -7,17 +7,22 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.foundation.text.input.setTextAndSelectAll import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextRange +import androidx.compose.ui.text.TextLayoutResult import androidx.compose.ui.unit.dp import io.legado.app.R import io.legado.app.ui.book.read.ReadBookIntent @@ -40,6 +45,8 @@ fun ContentEditSheet( ) { val context = LocalContext.current val editorState = remember { TextFieldState() } + val editorScrollState = rememberScrollState() + var textLayoutResult by remember { mutableStateOf(null) } LaunchedEffect(show) { if (!show) return@LaunchedEffect @@ -55,6 +62,16 @@ fun ContentEditSheet( } } + LaunchedEffect(show, state.contentEditLoading, state.contentEditCursorOffset, textLayoutResult) { + val layoutResult = textLayoutResult + if (!show || state.contentEditLoading || layoutResult == null) { + return@LaunchedEffect + } + val offset = state.contentEditCursorOffset.coerceIn(0, editorState.text.length) + val cursorTop = layoutResult.getCursorRect(offset).top.toInt() + editorScrollState.scrollTo((cursorTop - 120).coerceIn(0, editorScrollState.maxValue)) + } + LaunchedEffect(editorState) { snapshotFlow { editorState.text.toString() } .collect { text -> @@ -119,6 +136,10 @@ fun ContentEditSheet( } else { AppTextField( state = editorState, + scrollState = editorScrollState, + onTextLayout = { getResult -> + textLayoutResult = getResult() + }, modifier = Modifier .fillMaxWidth() .weight(1f, fill = false)