Поддержка сложной верстки текста с помощью шрифтов OpenType в Android

Что бы я хотел

Я хотел бы поместить шрифт OpenType в папку с активами и использовать Typeface.createFromAsset визуализировать текст Unicode в моем приложении Android для языка, который использует сложную разметку текста (CTL).

Фон

Я хочу сделать это для традиционного монгольского письма, но это та же проблема (насколько я слышу) для других языков, таких как тайский, арабский, индийский и многие языки меньшинств. Шрифт OpenType уже содержит информацию, необходимую для правильного отображения текста. Проблема в том, что не все программное обеспечение поддерживает рендеринг OpenType. Некоторые делают, но другие нет. Из того, что я могу собрать, Android раньше не привык, но, может быть, теперь делает?

Мой вопрос

Android Lollipop уже вышел. Есть ли поддержка шрифтов OpenType в Android?

Если все еще нет ничего легкого, то каков процесс? Я слышал о таких вещах, как Pango и Harfbuzz ( который утверждает, что работает с Android), но я не нашел каких-либо простых инструкций или учебных пособий о том, как их реализовать. Самое близкое, что я нашел, - это рендеринг индийского текста, но это не так легко понять.

Похожие вопросы по Stackru

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

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

Я написал свой собственный движок рендеринга для отображения традиционного монгольского текста Unicode. Но написание движка рендеринга для конкретного языка - это заново изобретать колесо, если уже есть доступные шрифты OpenType. Кроме того, его нелегко адаптировать к другим языкам.

2 ответа

Если вы хотите использовать Harfbuzz для этого, я написал простое руководство по реализации средства формирования текста с использованием Harfbuzz: http://www.simon-cozens.org/content/duffers-guide-fontconfig-and-harfbuzz

Это должно помочь вам выбрать шрифт и узнать, какие глифы следует использовать и где их поместить в вывод.

У меня нет опыта работы с монгольским в частности, но Lollipop наконец-то представил Paint.setFontFeatureSettings() которая принимает строку, соответствующую формату CSS, обеспечивая "низкоуровневый контроль над функциями шрифта OpenType"!

Другие вопросы по тегам