Как применить onTextLayout к OutlinedTextField в Jetpack Compose?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как применить onTextLayout к OutlinedTextField в Jetpack Compose?

Сообщение Anonymous »

Я написал код, который сохраняет сфокусированное TextField всегда видимым над клавиатурой, используя BasicTextField.

Код: Выделить всё

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun CustomTextField(
value: String,
onValueChange: (String) -> Unit
) {
val bringIntoViewRequester = remember { BringIntoViewRequester() }
val coroutineScope = rememberCoroutineScope()

var textFieldValue by remember { mutableStateOf(TextFieldValue(value)) }

BasicTextField(
value = textFieldValue,
onValueChange = {
textFieldValue = it
onValueChange(it.text)
},
onTextLayout = {
val cursorRect = it.getCursorRect(textFieldValue.selection.start)
coroutineScope.launch {
bringIntoViewRequester.bringIntoView(cursorRect)
}
},
modifier = Modifier.bringIntoViewRequester(bringIntoViewRequester)
)
}
Я пытаюсь применить это к OutlinedTextField, но, к сожалению, оно несовместимо с OutlinedTextField.

Итак, я попробовал использовать OutlinedTextField с DecorationBox, но этот подход не увенчался успехом.

Код: Выделить всё

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun CustomTextField(
value: String,
textStyle: TextStyle,
modifier: Modifier,
onValueChange: (String) -> Unit
) {
val bringIntoViewRequester = remember { BringIntoViewRequester() }
val coroutineScope = rememberCoroutineScope()

var textFieldValue by remember { mutableStateOf(TextFieldValue(value)) }

BasicTextField(
value = textFieldValue,

onValueChange = {
textFieldValue = it
onValueChange(it.text)
},
onTextLayout = {
val cursorRect = it.getCursorRect(textFieldValue.selection.start)
coroutineScope.launch {
bringIntoViewRequester.bringIntoView(cursorRect)
}
},
decorationBox = @Composable { innerTextField ->
OutlinedTextField(
value = textFieldValue.text,
onValueChange = {},
modifier = modifier.fillMaxWidth(),
textStyle = textStyle,
)
innerTextField()
},
modifier = Modifier.bringIntoViewRequester(bringIntoViewRequester)
)
}
Не могли бы вы дать совет?


Подробнее здесь: https://stackoverflow.com/questions/793 ... ck-compose
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»