Поддержка сложной верстки текста с помощью шрифтов OpenType в Android
Что бы я хотел
Я хотел бы поместить шрифт OpenType в папку с активами и использовать Typeface.createFromAsset
визуализировать текст Unicode в моем приложении Android для языка, который использует сложную разметку текста (CTL).
Фон
Я хочу сделать это для традиционного монгольского письма, но это та же проблема (насколько я слышу) для других языков, таких как тайский, арабский, индийский и многие языки меньшинств. Шрифт OpenType уже содержит информацию, необходимую для правильного отображения текста. Проблема в том, что не все программное обеспечение поддерживает рендеринг OpenType. Некоторые делают, но другие нет. Из того, что я могу собрать, Android раньше не привык, но, может быть, теперь делает?
Мой вопрос
Android Lollipop уже вышел. Есть ли поддержка шрифтов OpenType в Android?
Если все еще нет ничего легкого, то каков процесс? Я слышал о таких вещах, как Pango и Harfbuzz ( который утверждает, что работает с Android), но я не нашел каких-либо простых инструкций или учебных пособий о том, как их реализовать. Самое близкое, что я нашел, - это рендеринг индийского текста, но это не так легко понять.
Похожие вопросы по Stackru
Эти вопросы показывают, что есть интерес к этой теме, но, на мой взгляд, они не получили удовлетворительного ответа. Некоторые из них также устарели. Я хочу знать, есть ли текущее решение.
- Используйте функции шрифтов OpenType в Android
- Отображение перехвата и поддержка нелатинского или сложного языка сценариев в Andorid
- Поддержка CTL (сложный текстовый язык) в Android (sic)
- Индийский язык поддерживает SDK, но не PhoneGap
- HarfBuzz начало работы
- Indic-Text-Renderer с использованием harfbuzz и freetype
Что я пробовал
Я написал свой собственный движок рендеринга для отображения традиционного монгольского текста Unicode. Но написание движка рендеринга для конкретного языка - это заново изобретать колесо, если уже есть доступные шрифты OpenType. Кроме того, его нелегко адаптировать к другим языкам.
2 ответа
Если вы хотите использовать Harfbuzz для этого, я написал простое руководство по реализации средства формирования текста с использованием Harfbuzz: http://www.simon-cozens.org/content/duffers-guide-fontconfig-and-harfbuzz
Это должно помочь вам выбрать шрифт и узнать, какие глифы следует использовать и где их поместить в вывод.
У меня нет опыта работы с монгольским в частности, но Lollipop наконец-то представил Paint.setFontFeatureSettings()
которая принимает строку, соответствующую формату CSS, обеспечивая "низкоуровневый контроль над функциями шрифта OpenType"!