Фон
В TextView всегда были проблемы с языками RTL (справа налево). Поскольку я знаю только, как читать иврит (в дополнение к английскому), я буду говорить о его проблемах:
-
Выравнивание текста (и я не говорю о гравитации). Как язык RTL, иврит помещает слова справа налево (по сравнению с английским, что является обратным).
Для демонстрации того, насколько это раздражает, представьте, что вместо того, чтобы показывать "Hello world". вы обычно получаете ".Hello world". Это можно было бы легко исправить, если бы у вас было это в одном предложении, но это сложнее, когда есть несколько символов пунктуации.
-
Позиции гласных. Иврит не требует гласных, чтобы читать текст, но иногда их очень трудно читать без них (особенно библия). Для гласных на иврите есть так называемое "NIKUD", которое на самом деле похоже на точки внутри букв. Проблема в Android заключалась в том, что они обычно располагались в неправильном месте.
Для демонстрации того, насколько это раздражает, представьте, что вместо того, чтобы показывать "Hello world". вы обычно получаете ".eHlol owrld". Даже если вы попытаетесь его исправить (поместите гласные всегда на один символ после текущего), позиция в письме неверна (предположите, что "e" в "Привет" будет как над "H", для пример).
Только в версии 4.2 (читайте здесь, в разделе "Поддержка родной RTL" ) Google исправил все проблемы, связанные с ивритом (или, по крайней мере, так кажется).
Проблема
проблемы с ивритом привели к тому, что каждый израильский перевозчик и каждый пользовательский производитель ПЗУ имеют свое собственное решение о том, как исправить разные проблемы, что практически не позволяет обрабатывать RTL-текст на устройствах до 4.2.
Вещи могут стать еще более неприятными, если текст включает в себя иврит и английские буквы.
Что я пробовал
Я прочитал много сайтов, рассказывающих об этих проблемах, и я пробовал много вариантов решений, ни одна из них не решила проблему на всех устройствах:
-
Некоторые предлагают поместить символ '\ u200F' (или '\ u202D') в конец/начало/оба текста.
-
Некоторые предлагают использовать метод Html.fromHtml() и помещать там что-то особенное.
-
Некоторые даже предлагают использовать WebView вместо (и, возможно, использовать WebSettings.setDefaultTextEncodingName()).
Вопрос
Существует ли определенное решение этой проблемы?
Я бы предположил, что лучше всего, потому что Android 4.2 решает это, а Android - с открытым исходным кодом, мы должны импортировать его TextView в библиотеку, которую мы можем использовать, но Google еще не предоставил такую библиотеку.