Как обрабатывать языки RTL в версиях Android до 4.2?

Задний план

У TextView всегда были проблемы с языками RTL (справа налево). Поскольку я знаю только, как читать иврит (в дополнение к английскому), я буду говорить о его проблемах:

Только в версии 4.2 (читайте здесь , в разделе «Поддержка родной RTL»), Google исправил все проблемы, связанные с ивритом (или, по крайней мере, так кажется).

Проблема

Проблемы с ивритом привели к тому, что каждый израильский перевозчик и каждый пользовательский производитель ПЗУ имеют свое собственное решение о том, как исправить разные проблемы, что практически не позволяет обрабатывать RTL-текст на устройствах до 4.2.

Вещи могут стать еще более неприятными, если текст включает в себя иврит и английские буквы.

Что я пробовал

Я читал много сайтов, рассказывающих об этих проблемах, и я пробовал много вариантов решений, ни одна из них не решила проблему на всех устройствах:

  • Некоторые предлагают поместить символ '\ u200F' (или '\ u202D') в конец / начало / оба текста.

  • Некоторые предлагают использовать метод Html.fromHtml () и помещать там что-то особенное.

  • Некоторые даже предлагают использовать WebView вместо (и, возможно, использовать WebSettings.setDefaultTextEncodingName () ).

Вопрос

Есть ли определенное решение этой проблемы?

Я бы предположил, что самое лучшее в том, что, поскольку Android 4.2 решает это, а Android – с открытым исходным кодом, мы должны импортировать его TextView в библиотеку, которую мы можем использовать, но Google еще не предоставил такую ​​библиотеку.

Solutions Collecting From Web of "Как обрабатывать языки RTL в версиях Android до 4.2?"

К сожалению, я не думаю, что есть хорошее решение («хорошее» значение «делает работу и доступно»). Для наших собственных приложений для Android, поддерживающих иврит, мы используем собственный механизм рендеринга, который мы разработали на протяжении многих лет. Механизм рендеринга делает все: фирменные шрифты; Двунаправленный (bidi) анализ; Размещение глифов; Анализ разрыва строки; Текстовый поток; И т. Д. Некоторые проблемы, связанные с использованием собственных возможностей обработки текста на Android (особенно до 4.2):

  1. Действительно дрянные шрифты. Тем не менее, вы можете упаковать сторонние шрифты, такие как DejaVu , которые очень хороши. Правильный шрифт может творить чудеса с позиционированием nekudot и te'amim 1 , если вам это нужно. (Я согласен с вами в отношении того, насколько важно правильное размещение указаний, чтение текста на иврите с неуместным некудотом похоже на чтение экрана, заполненного CAPTCHA .)

  2. Анализ багги-биди. Что еще хуже, так это то, что ошибки различаются для разных версий Android. Модификация текста, который включает стратегически размещенные коды форматирования биди (отметка RTL, отметка LTR и т. Д.), Может преодолеть многие из этих ошибок (см. Обсуждение здесь , которое не относится к Android). Тем не менее, это неприятно для этого, и из-за несоответствий между версиями Android трудно заранее предсказать, какая помощь понадобится инфраструктуре.

  3. Нет (или плохо продуманный) уровень знаний о праве налево. Например, удачи, получив полосу прокрутки для отображения на левой стороне текстового текста на иврите. Для наших приложений нам нужно было создать всю систему прокрутки, чтобы заставить ее работать так, как мы хотели. (Хорошо, что Android – с открытым исходным кодом!)

  4. Плохой анализ строк и слов. По крайней мере, одна ранняя версия Android, на которой мы тестировали, считала, что каждая метка nikud является границей слов. Когда дело доходит до разрывов строк, система часто не знает, как обращаться с ивритской пунктуацией, такой как maqaf, gershayim или sof pasuk.

  5. Некоторые из новых символов Unicode (например, HOLAM HASER FOR VAV-U + 05BA-new для Unicode 5.0) не распознаются системой на иврите.

Моя рекомендация заключается в том, что, если вы не готовы самостоятельно создавать систему обработки текста сверху вниз, вы отказываетесь от высококачественного текстового отображения на версиях Android до 4.2, особенно если вам нужно поддерживать nekudot и te'amim , Кроме того, планируйте использовать методы, упомянутые мной в первых двух пунктах выше.

1 библейские отметки кантиляции

По состоянию на август 2013 года Android опубликовал документацию API для двунаправленного форматирования, которая может удовлетворить ваши потребности. Это содержится в библиотеке Android Support v4, которая, как мне кажется, должна работать в версиях до Android 4.2.

См. Также: http://developer.android.com/reference/android/support/v4/text/BidiFormatter.html.