Данный ответ будет делать работу, если текст в TextView
.
Могут быть случаи, когда текст смешанного языка не должен отображаться в TextView
. Например, текст может быть передан в доле Intent
в Gmail или WhatsApp и так далее. В таких случаях необходимо использовать комбинацию из следующих классов:
Как указано в документации, эти ...
класса Utility [es] для форматирования текста для отображения в потенциально противоположном контексте без искажения. Направленность контекста задается при создании форматирования, и направленность текста может быть оценена или передана, когда известна.
Так, например, у вас есть String
, который имеет сочетание английского & арабского языка, и вам нужен текст, который будет
- справа налево (RTL).
- всегда выравнивание по правому краю, даже если предложение начинается с английского.
- English & Арабские слова в правильной последовательности и без искажений.
, то вы могли бы добиться этого с помощью метода unicodeWrap()
следующим образом:
String mixedLanguageText = ... // mixed-language text
if(BidiFormatter.getInstance().isRtlContext()){
Locale rtlLocale = ... // RTL locale
mixedLanguageText = BidiFormatter.getInstance(rtlLocale).unicodeWrap(mixedLanguageText, TextDirectionHeuristics.ANYRTL_LTR);
}
Это преобразовать строку в RTL и выравнивать его влево, если даже один RTL-язык символов был в строке , а в противном случае - возврат к LTR. Если вы хотите, чтобы строка была RTL, даже если она полностью включена, скажем, английский (язык LTR), вы можете использовать TextDirectionHeuristics.RTL
вместо TextDirectionHeuristics.ANYRTL_LTR
.
Это правильный способ обработки текста смешанного направления в отсутствие TextView
. Интересно, что в качестве документации государств,
заметить также, что эти направления эвристика соответствует тем же типам констант, представленных в View
классе setTextDirection()
, такие как TEXT_DIRECTION_RTL
.
Update:
Я только что нашел Bidi
класс в Java, который, кажется, чтобы сделать что-то подобное. Поищи это!
Дополнительные ссылки:
1.Write text file mix between arabic and english.
2.Unicode Bidirectional Algorithm.
может быть, вы можете разместить скриншот для иллюстрации. Какую систему вы проверили? Реализации могут быть специфичными для OEM. –
К сожалению, я не могу опубликовать скриншот, и я тестировал thta на нескольких устройствах с различными версиями Android – NickF