Как включить поддержку смешанных языков: арабского и английского, где один — RTL, а другой — LTRAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как включить поддержку смешанных языков: арабского и английского, где один — RTL, а другой — LTR

Сообщение Anonymous »

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

var inputValue by remember { mutableStateOf(TextFieldValue()) } // 2
val isRtl = if (inputValue.text.isNotEmpty()) {
val firstChar = inputValue.text[0]
Bidi.getBaseDirection(firstChar.toString()) == Bidi.DIRECTION_RIGHT_TO_LEFT.toByte()
} else {
false
}

fun sendMessage() { // 3
callback(inputValue.text)
inputValue = TextFieldValue("")
}

Row(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight(),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.Bottom,
) {
OutlinedTextField(
value = inputValue,
onValueChange = { inputValue = it },
placeholder = { Text(text = "Message") },
shape = RectangleShape,
modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colorScheme.background)
.background(MaterialTheme.colorScheme.surface)
.heightIn(max = 200.dp),
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Text,
imeAction = ImeAction.None
),
keyboardActions = KeyboardActions(onSend = { sendMessage() }),
leadingIcon = {
Image(
painter = painterResource(id = R.drawable.baseline_edit_note_24),
contentDescription = "Person",
modifier = Modifier
.size(30.dp)
)
},
trailingIcon = {
IconButton(
onClick = { sendMessage() },
enabled = inputValue.text.isNotBlank(),
) {
Icon(
imageVector = Icons.Default.Send,
contentDescription = "Send",
tint = if (inputValue.text.isNotBlank()) green else Color.White,
)
}
},
textStyle = if (isRtl) LocalTextStyle.current.copy(textDirection = TextDirection.Rtl) else LocalTextStyle.current,
colors = TextFieldDefaults.textFieldColors(
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
cursorColor = green,
)
)
Здесь я использую это, чтобы изменить направление текстового поля, когда пользователь использует языки с письмом справа налево

и он отлично с этим справляется, но если вы добавите смайлики или любой LTR таком языке, как английский, он приводит к инвертированию
сохраненного текста.
Пример
это ввод
قق rrrrv. تتتت ع

и он хранится, как показано ниже
تتتت ع rrrrv. قق
Я хочу решить эту проблему, как я могу это сделать
Я хотел, чтобы, когда пользователь начинает вводить данные в RTL, направление текстового поля RTL было
получите ввод, и если пользователь смешивает язык, заставьте его поддерживать RTL, а затем сохраняет значение.
Но при сохранении их значения смещаются в переменной при использовании текста для их загрузки. .
Как это исправить

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

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

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

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

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

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

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