Jetpack Compose: Добавление счетчика символов в базовое текстовое поле

#android #android-jetpack-compose

Вопрос:

Я пытаюсь добавить счетчик символов внутри базового текстового поля (я не могу использовать текстовое поле. Это должно быть ниже Материального уровня). Я добавил базовый текст в декораторе, но теперь мне нужно обновлять его всякий раз, когда кто-то изменяет текст. Как мне получить текстовую строку из поля Внутренний текст и обновить свой базовый текст?

 @Composable
fun MyTextField(
    value: TextFieldValue,
    onValueChange: (TextFieldValue) -> Unit,
    modifier: Modifier = Modifier
){
    val charCount = 0 // How do I update this in onValueChange?

    BasicTextField(
        value = value,
        onValueChange = onValueChange,
        modifier = modifier,
        decorationBox = { innerTextField ->
            Row(
                Modifier
                    .padding(16.dp)
            ) {
                BasicText(text = charCount.toString())
                Spacer(Modifier.width(5.dp))
                innerTextField()
            }
        })
}
 

Комментарии:

1. Без обиняков, charCount будь mutableStateOf { 0 } что будет с тобой remember . Затем укажите onValueChange параметр для BasicTextField вызова параметра onValueChange функции и обновления charCount на основе текущей длины текста.

2. вам вообще не нужен счетчик, он всегда у вас есть value.text.count() , и он будет составлен заново только при обновлении текста

Ответ №1:

Вы можете просто использовать val charCount = value.text.count() . Он всегда будет обновляться благодаря автоматической перестановке.