Ресурсы шрифтов Android и ресурсы шрифтов (API 26) - PullRequest
0 голосов
/ 09 февраля 2019

Для использования пользовательских шрифтов в приложении для Android существует два подхода:

  1. Классический способ : поместить файлы TTF или OTF в каталог /assets/fonts изатем создайте Typeface с Typeface.createFromAsset(getAssets(), "fonts/custom.ttf").
  2. Собственно с API 26 или с AppCompat с API 16 : создайте семейство XML-шрифтов , поместив файлы TTF / OTF в нижнем регистре в папку res/font, а затем ссылайтесь на них непосредственно в макетах XML с помощью android:fontFamily="@font/custom" или запрограммируйте их с помощью ResourcesCompat.getFont(this, R.font.custom).

Какие ключевые различия следует учитывать между ресурсами шрифта и ресурсами?

В частности, они отображаются одинаково, и является ли какой-либо из них более быстрым или более эффективным с точки зрения производительности?

Можно ли предположить, что ресурсы шрифтов подходят только для шрифтов, которые приходятпредварительно упакованы в APK, в то время как ресурсы шрифта более гибкие, так как вы можете создать гарнитуру из произвольного файла внутри или снаружи APK?

Обновление: После небольшого количества экспериментов это выглядитПодобно ресурсам шрифтов, это единственный способ установить пользовательские шрифты в AppWidget TextView s без необходимости вручную рисовать их как растровые изображения, но для этого требуется, чтобы устройство фактически запускало API 26 (использование библиотеки поддержки не помогает в данном конкретном случае).

1 Ответ

0 голосов
/ 10 февраля 2019

В частности, они отображаются одинаково, и является ли какой-либо из них быстрее или эффективнее с точки зрения производительности?

ResourcesCompat.getFont работает так:

  1. Проверьте кэш в памяти, если мы уже преобразовали идентификатор ресурса шрифта в Typeface.Если у нас есть попадание, все готово.
  2. Скопируйте ресурс в файл на диске.
  3. Создайте Typeface из файла с помощью Typerface.createFromFile и кэшируйте его.

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

Оба подхода работают одинаково.Они создают Typeface объект из источника.

Одно ключевое отличие: Если вы напрямую используете Typeface API, вы отвечаете за кеширование. Вы не хотитезагружать один и тот же шрифт несколько раз, потому что каждый экземпляр Typeface занимает много памяти.

Исторически я использовал этот код из Calligraphy для обеспечения кэширования при загрузке гарнитур из ресурсов.

После нескольких экспериментов кажется, что ресурсы шрифтов - единственный способ установить пользовательские шрифты в AppWidget TextViews [...]

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

См. Также: Как использовать пользовательскую гарнитуру в виджете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...