Приложение сбоя при попытке использовать VisualTransformation в текстовом полеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение сбоя при попытке использовать VisualTransformation в текстовом поле

Сообщение Anonymous »

Итак, я пытаюсь реализовать верхний ответ в этой теме < /p>
demo < /p>
< /p>
, а также следующее видео < /p>
Демо -версия YouTube < /p>
Приложение строит нормально, но как только я нажимаю на текстовое поле, чтобы начать вставку данных, приложение сбоя со следующей ошибкой (стек трассировка слишком велика, чтобы копировать, я думаю) < /p>

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

java.lang.IllegalStateException: OffsetMapping.transformedToOriginal returned invalid mapping: 12 -> 10 is not in range of original text [0, 0]
< /code>
Я просто не могу видеть, где находится проблема, так как в основном нет отклонений от примеров, приведенных, кроме небольших изменений в маску и смещении в соответствии с форматом, который я ищу. Но, насколько я вижу, это должно быть в порядке. Мой образец кода заключается в следующем. < /P>
    @Composable
fun DisplayPhoneNumberTextField() {

var mobileNo by remember {
mutableStateOf("")
}

OutlinedTextField(
value = mobileNo,
onValueChange = { mobileNo = it},
modifier = Modifier.fillMaxWidth(),
placeholder = {
Text(text = "Phone Number")
},
singleLine = true,
colors = TextFieldDefaults.textFieldColors(
focusedIndicatorColor = MaterialTheme.colors.secondary
),
visualTransformation = {
phoneNumberInputFormatter(it)
},
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
)
}

private fun phoneNumberInputFormatter(text : AnnotatedString) : TransformedText {

val mask = "xxx-xxx-xxxx"

val trimmed = if(text.text.length >= 10) text.text.substring(0..9) else text.text

val annotatedString = AnnotatedString.Builder().run {
for (i in trimmed.indices){
append(trimmed[i])
if (i == 2 || i == 5){
append("-")
}
}
pushStyle(SpanStyle(color = Color.LightGray))
append(mask.takeLast(mask.length - length))
toAnnotatedString()
}

val phoneNumberOffsetTranslator = object : OffsetMapping {
override fun originalToTransformed(offset: Int): Int {
if (offset 

Подробнее здесь: [url]https://stackoverflow.com/questions/76994747/app-crashes-when-trying-to-use-visualtransformation-in-a-textfield[/url]
Ответить

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

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

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

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

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