现在搜素框可以自动唤出键盘

This commit is contained in:
HapeLee
2026-05-11 03:28:12 +08:00
parent 3042131457
commit 920d4058e7
@@ -12,10 +12,14 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.snapshotFlow import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Modifier 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.graphics.Color
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.legado.app.ui.theme.LegadoTheme import io.legado.app.ui.theme.LegadoTheme
@@ -45,9 +49,20 @@ fun SearchBar(
scrollState: LazyListState? = null, scrollState: LazyListState? = null,
scope: CoroutineScope = rememberCoroutineScope(), scope: CoroutineScope = rememberCoroutineScope(),
trailingIcon: @Composable (() -> Unit)? = null, trailingIcon: @Composable (() -> Unit)? = null,
autoFocus: Boolean = true,
dropdownMenu: (@Composable (onDismiss: () -> Unit) -> Unit)? = null dropdownMenu: (@Composable (onDismiss: () -> Unit) -> Unit)? = null
) { ) {
val textFieldState = rememberTextFieldState(initialText = query) val textFieldState = rememberTextFieldState(initialText = query)
val focusRequester = remember { FocusRequester() }
val keyboardController = LocalSoftwareKeyboardController.current
LaunchedEffect(autoFocus) {
if (autoFocus) {
focusRequester.requestFocus()
// 某些情况下需要手动调用 show() 确保键盘弹出
keyboardController?.show()
}
}
LaunchedEffect(query) { LaunchedEffect(query) {
if (query != textFieldState.text.toString()) { if (query != textFieldState.text.toString()) {
@@ -78,7 +93,8 @@ fun SearchBar(
state = textFieldState, state = textFieldState,
modifier = modifier modifier = modifier
.fillMaxWidth() .fillMaxWidth()
.padding(vertical = 4.dp), .padding(vertical = 4.dp)
.focusRequester(focusRequester),
placeholder = { AppText(placeholder) }, placeholder = { AppText(placeholder) },
leadingIcon = leadingIcon, leadingIcon = leadingIcon,
trailingIcon = trailingIcon, trailingIcon = trailingIcon,
@@ -102,7 +118,9 @@ fun SearchBar(
) { ) {
AppDenseTextField( AppDenseTextField(
state = textFieldState, state = textFieldState,
modifier = modifier.fillMaxWidth(), modifier = modifier
.fillMaxWidth()
.focusRequester(focusRequester),
placeholder = { AppText(placeholder) }, placeholder = { AppText(placeholder) },
leadingIcon = leadingIcon, leadingIcon = leadingIcon,
trailingIcon = trailingIcon, trailingIcon = trailingIcon,