#android-jetpack-compose #android-jetpack-compose-text #android-jetpack-compose-list
#android-jetpack-сочинять #android-реактивный ранец-сочинение текста #android-реактивный ранец-составить список
Вопрос:
Возможно, это нормальное поведение, но я хотел бы, чтобы оно было другим. Я попытался найти решение в Google, но не нашел ничего подходящего (или просто пропустил его).
Пример кода (для простоты я сохраняю изменяемые состояния прямо здесь, не используя ViewModel):
@Composable fun Greeting() { Scaffold(topBar = { TopAppBar(title = { Text(text = "Some title") }) }) { val focusManager = LocalFocusManager.current LazyColumn( contentPadding = PaddingValues(all = 16.dp), verticalArrangement = Arrangement.spacedBy(space = 16.dp) ) { items(count = 20) { index -gt; val (value, onValueChange) = rememberSaveable { mutableStateOf("Some value $index") } TextField( value = value, onValueChange = onValueChange, modifier = Modifier.fillMaxWidth(), label = { Text(text = "Some label $index") }, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), keyboardActions = KeyboardActions(onNext = { if (!focusManager.moveFocus(FocusDirection.Down)) focusManager.clearFocus() }), singleLine = true ) } } } }
Составьте версию 1.0.5
Ответ №1:
Вы можете попробовать просто скрывать клавиатуру всякий раз, когда происходит прокрутка. Это нормально, пока у вас нет большого набора предметов. Но поскольку вы используете текстовые поля, маловероятно, что у вас будет такое большое количество. Этот пример иллюстрирует скрытие клавиатуры при прокрутке:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) startActivity(intent) setContent { Greeting(this) } } } @Composable fun Greeting(activity: Activity) { Scaffold(topBar = { TopAppBar(title = { Text(text = "Some title") }) }) { val lazyListState = rememberLazyListState() val ctx = LocalContext.current LaunchedEffect(lazyListState.firstVisibleItemIndex) { val inputMethodManager = ctx.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(activity.window?.decorView?.windowToken, 0) } LazyColumn( state = lazyListState, contentPadding = PaddingValues(all = 16.dp), verticalArrangement = Arrangement.spacedBy(space = 16.dp) ) { items( count = 20, key = { index -gt; // Return a stable unique key for the item index } ) { index -gt; val (value, onValueChange) = rememberSaveable { mutableStateOf("Some value $index") } TextField( value = value, onValueChange = onValueChange, modifier = Modifier .fillMaxWidth(), label = { Text(text = "Some label $index") }, singleLine = true ) } } } }
Комментарии:
1. Хм, возможно, это вариант. Спасибо вам за совет.