Эквивалент Android для CoreText

У нас есть приложение для iOS, которое отображает огромное количество текста: http://itunes.apple.com/br/app/biblia-sagrada/id370178518?mt=8

Мы используем CoreText для рендеринга текста и предоставляем пользователю возможность изменять форматирование, размер и начертание шрифта.

Мы пытаемся перенести его на Android, но я не уверен, есть ли замена CoreText в Android.


person ppaulojr    schedule 22.04.2012    source источник


Ответы (2)


Эквивалентом iOS CoreText в Android являются drawText API, часть класса Canvas, Canvas.drawText(), Canvas.drawPosText() и т. д. см. javadoc для Canvas для более подробной информации. Эти графические API используют Skia внизу.

Функциональные возможности, предоставляемые этими графическими API, не такие, как в iOS, скажем, нет эквивалента CTFramesetter, который помогает вам размещать текст и обрабатывать разрывы строк для вас. С API-интерфейсами drawText вы можете рисовать только одну строку за раз, вам придется самостоятельно обрабатывать разрывы строк. Это похоже на использование CTTypesetter в iOS. Для размещения текста см. Paint.breakText и Paint.measureText.

Для изменения размера шрифта и начертания шрифта вы можете установить соответствующие атрибуты в объекте Paint, который передается в качестве последнего параметра API-интерфейсам drawText.

Фрагмент:

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(14);
String text = "Hello world!";
canvas.drawText(text, 0, 100, paint);

Примечание. Система координат, используемая в Android drawText API, начинается с left-top угла.

person neevek    schedule 08.05.2012
comment
Изменилось ли что-нибудь за последние 6 лет? У Android теперь есть настоящая текстовая система? - person Lothar; 07.09.2019
comment
@Lothar, я давно не занимался рендерингом текста. Но я предполагаю, что ответ на ваш вопрос по-прежнему отрицательный, я не видел каких-либо существенных изменений в отношении рендеринга текста, внесенных в последние годы. Поскольку производительность WebView, а также производительность аппаратного обеспечения значительно улучшились, в настоящее время HTML для сложного размещения/отрисовки текста может быть подходящим способом. - person neevek; 12.09.2019

TextView может обрабатывать «возможность изменения форматирования, размера шрифта и шрифта» с помощью расширяемых строк. См. пакет android.text.style для различных эффектов, которые вы можете применить.

Что касается «огромного количества текста», заверните TextView в ScrollView.

Вы всегда можете вернуться к использованию WebView, что дает вам все возможности WebKit для рендеринга HTML, если это необходимо.

person CommonsWare    schedule 22.04.2012
comment
В iOS CoreText сообщает точное количество текста, которое будет видно в определенном фрейме. Эта функция очень удобна, так как приложение может размещать несколько фреймов, размещенных на ScrollView, разбивая текст на страницы. Может ли TextView сделать то же самое на Android? - person javsmo; 22.04.2012
comment
@javsmo: Не то, чтобы я знал об этом. Единственный текст с разбивкой на страницы, который я видел на Android, — это программы для чтения электронных книг, которые будут использовать HTML и WebView. - person CommonsWare; 22.04.2012
comment
@CommonsWare, не совсем так, большинство программ для чтения электронных книг используют холст и API-интерфейсы drawText, однажды я реализовал программу для чтения электронных книг, с API-интерфейсами drawText все было бы гораздо более управляемо. - person neevek; 29.01.2013