From 920d4058e7e5e5beb49aeaf7d8fa5db479542abf Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Mon, 11 May 2026 03:01:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E6=90=9C=E7=B4=A0=E6=A1=86?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=87=AA=E5=8A=A8=E5=94=A4=E5=87=BA=E9=94=AE?= =?UTF-8?q?=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/widget/components/SearchBar.kt | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/components/SearchBar.kt b/app/src/main/java/io/legado/app/ui/widget/components/SearchBar.kt index acf72d21f..e1070ecff 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/SearchBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/SearchBar.kt @@ -12,10 +12,14 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import io.legado.app.ui.theme.LegadoTheme @@ -45,9 +49,20 @@ fun SearchBar( scrollState: LazyListState? = null, scope: CoroutineScope = rememberCoroutineScope(), trailingIcon: @Composable (() -> Unit)? = null, + autoFocus: Boolean = true, dropdownMenu: (@Composable (onDismiss: () -> Unit) -> Unit)? = null ) { val textFieldState = rememberTextFieldState(initialText = query) + val focusRequester = remember { FocusRequester() } + val keyboardController = LocalSoftwareKeyboardController.current + + LaunchedEffect(autoFocus) { + if (autoFocus) { + focusRequester.requestFocus() + // 某些情况下需要手动调用 show() 确保键盘弹出 + keyboardController?.show() + } + } LaunchedEffect(query) { if (query != textFieldState.text.toString()) { @@ -78,7 +93,8 @@ fun SearchBar( state = textFieldState, modifier = modifier .fillMaxWidth() - .padding(vertical = 4.dp), + .padding(vertical = 4.dp) + .focusRequester(focusRequester), placeholder = { AppText(placeholder) }, leadingIcon = leadingIcon, trailingIcon = trailingIcon, @@ -102,7 +118,9 @@ fun SearchBar( ) { AppDenseTextField( state = textFieldState, - modifier = modifier.fillMaxWidth(), + modifier = modifier + .fillMaxWidth() + .focusRequester(focusRequester), placeholder = { AppText(placeholder) }, leadingIcon = leadingIcon, trailingIcon = trailingIcon,