Клавиатура не скрывается, когда сфокусированное текстовое поле покидает столбец LazyColumn

#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. Хм, возможно, это вариант. Спасибо вам за совет.