Как добавить шрифт в android studio
Перейти к содержимому

Как добавить шрифт в android studio

  • автор:

Как задать в приложении свой шрифт?

Как добавить в приложение свой шрифт и присвоить элементу TextView?

Отслеживать

задан 7 июн 2015 в 22:38

153 2 2 золотых знака 3 3 серебряных знака 14 14 бронзовых знаков

Пожалуйста, обратите ваше внимание: google.com.ua/…

8 июн 2015 в 5:21

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

TextView textView = (TextView) findViewById(); Typeface typeFace = Typeface.createFromAsset(getAssets(), ""); textView.setTypeface(typeFace); 

Но лучше (ну, просто кто-то любит более полные решения и не любит копировать одно и то же для всех 128 TexView в приложении) отнаследоваться от TextView:

public class FontableTextView extends TextView < public FontableTextView(Context context) < super(context); >public FontableTextView(Context context, AttributeSet attrs) < super(context, attrs); UiUtil.setCustomFont(this, context, attrs, R.styleable.com_example_foo_view_FontableTextView, R.styleable.com_example_foo_view_FontableTextView_font); >public FontableTextView(Context context, AttributeSet attrs, int defStyle) < super(context, attrs, defStyle); UiUtil.setCustomFont(this, context, attrs, R.styleable.com_example_foo_view_FontableTextView, R.styleable.com_example_foo_view_FontableTextView_font); >> 
public class UiUtil < public static final String TAG = "UiUtil"; public static void setCustomFont(View textViewOrButton, Context ctx, AttributeSet attrs, int[] attributeSet, int fontId) < TypedArray a = ctx.obtainStyledAttributes(attrs, attributeSet); String customFont = a.getString(fontId); setCustomFont(textViewOrButton, ctx, customFont); a.recycle(); >private static boolean setCustomFont(View textView, Context ctx, String asset) < if (TextUtils.isEmpty(asset)) return false; Typeface tf = null; try < tf = getFont(ctx, asset); if (textView instanceof TextView) < ((TextView) textView).setTypeface(tf); >> catch (Exception e) < Log.e(TAG, "Could not get typeface: " + asset, e); return false; >return true; > private static final Hashtable> fontCache = new Hashtable>(); public static Typeface getFont(Context c, String name) < synchronized (fontCache) < if (fontCache.get(name) != null) < SoftReferenceref = fontCache.get(name); if (ref.get() != null) < return ref.get(); >> Typeface typeface = Typeface.createFromAsset( c.getAssets(), "fonts/" + name ); fontCache.put(name, new SoftReference(typeface)); return typeface; > > > 

Сам шрифт положить в assets/fonts, в частности:

 assets/fonts/coolfont.ttf 

Совет: Работаем со своими шрифтами в Android O

В этой серии мы рассмотрим некоторые из современных функций пользовательского интерфейса, с которыми вы можете начать экспериментировать сегодня, в версии Android O для предварительного ознакомления разработчиками.

В первом совете я показал вам, как настроить свою разработку для поддержки этого раннего предварительного просмотра O, и как создать текст, который автоматически масштабируется в соответствии с текущей конфигурацией экрана. В этом совете мы увидим, как Android O сделает работу с пользовательскими шрифтами беззаботной.

Добавление ваших шрифтов в проект

Вы когда-нибудь хотели выделить отдельный фрагмент текста? Или, может быть, вы были убеждены, что ваш шрифт станет отличным способом добавить в ваше приложение дополнительную индивидуальность?

Хотя есть много преимуществ при использовании пользовательских шрифтов, работа с ними на Android традиционно была болезненным опытом, требуя, чтобы вы либо использовали библиотеку, либо создали пользовательский View .

К счастью, работа с пользовательскими шрифтами в Android будет намного проще, так как пользовательские шрифты станут полностью поддерживаемым типом ресурсов в Android O. Это означает, что добавление пользовательского шрифта в ваше приложение будет таким же простым, как добавление любого другого ресурса, например изображения и текста.

Чтобы следовать этому руководству, вам понадобятся несколько файлов шрифтов, которые вы можете добавить в проект с Android O, который мы создали в первой части.

Android O поддерживает оба формата: .otf (OpenType) и .ttf (TrueType). Существует множество веб-сайтов, предлагающих такие шрифты бесплатно, поэтому потратьте несколько минут на поиск в Google, пока не найдете нужный шрифт.

Поскольку мы просто экспериментируем с новыми функциями Android O, не имеет особого значения, какой шрифт вы используете, но если вы ищете шрифты для использования в релизах вашего приложения, вы всегда должны смотреть условия использования этого шрифта. Только потому, что файл доступен для загрузки, не означает автоматически, что нет ограничений на то, как вы можете использовать и обращаться с этим файлом, поэтому всегда читайте мелкий текст!

Вы также должны задуматься о цели, содержании и целевой аудитории вашего приложения, так как разные шрифты передают разные сообщения. Если вы разрабатываете приложение, помогающее людям заполнять их налоговые декларации, то ваша аудитория с трудом сможет серьезно отнестись к финансовым и юридическим советам в вашем приложении, если оно поставляется со непонятным и странным шрифтом!

Как только вы найдете шрифт, с которым хотите работать, загрузите и разархивируйте его. На этом этапе вы должны проверить имя файла шрифта на наличие недопустимых символов — по сути это, что угодно, что не входит в строчные a-z, 0-9 или символ подчеркивания. Попробуйте использовать любые другие символы и Android Studio выдаст ошибку, как только вы попытаетесь сослаться на этот ресурс.

Так как у вас есть файл(ы) шрифтов, вам надо будет где-то их хранить:

Create a resfont folder in Android Studio

  • Правый клик по папке app/res вашего проекта и выберите New > Android resource directory.
  • Откройте выпадающее меню и выберите font.
  • Введите font в File name.
  • Нажмите OK.
  • Переместите файлы вашего шрифта в новую папку res/font.

Использование своих шрифтов

Вы можете применить свой шрифт к тексту, используя новый XML атрибут android:fontFamily :

Как в Android Studio изменить шрифт стандартной темы на кастомный?

В самой дефолтной теме приложение которая автоматически применяется в Android Studio для каждого нового проекта сверху,под статус баром,отображается панелька синего цвета с названием приложения.Каким образом можно отредактировать шрифт на этой панельке?

  • Вопрос задан более трёх лет назад
  • 4713 просмотров

Комментировать
Решения вопроса 1

abler98

Software Engineer

У класса Typeface определены стандартные шрифты, достаточно переопределить нужные значения и будет Вам счастье.

public class Typeface < . /** The default NORMAL typeface object */ public static final Typeface DEFAULT; /** * The default BOLD typeface object. Note: this may be not actually be * bold, depending on what fonts are installed. Call getStyle() to know * for sure. */ public static final Typeface DEFAULT_BOLD; /** The NORMAL style of the default sans serif typeface. */ public static final Typeface SANS_SERIF; /** The NORMAL style of the default serif typeface. */ public static final Typeface SERIF; /** The NORMAL style of the default monospace typeface. */ public static final Typeface MONOSPACE; . >

Можно ещё сделать примерно так:

Потом в коде установить шрифт:

Typeface typeface = Typeface.createFromAsset(context.getAssets(), fontAssetName); TextView toolbarTitle = (TextView) findViewById(R.id.toolbar_title); toolbarTitle.setTypeface(typeface);

Использование Downloadable Fonts в приложении

Android Tools

Ранее мы писали о том, Google добавили в Android поддержку шрифтов из своего каталога Google Fonts. В этой статье мы подробно рассмотрим, как можно это реализовать в своём приложении.

Благодаря Google Fonts вы можете использовать тысячи самых разных шрифтов в своих приложениях. Более того, эта возможность теперь распространяется не только на Android O (API 26), но также на все устройства, начиная с API 14, благодаря использованию библиотеки поддержки.

Использование загружаемых шрифтов несёт в себе следующие преимущества:

  • уменьшение размера APK (вам не нужно включать в проект .ttf файлы со шрифтами);
  • приложение на устройстве пользователя могут совместно использовать шрифты из одного источника, не раздувая хранилище избыточными файлами.

Как это работает?

Благодаря встроенной поддержке шрифтов, особенно подчёркивается второй пункт. Например, ниже представлена схема, по которой разные приложения могут пользоваться общими шрифтами.

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

Такая схема необходима, чтобы система не вносила вредоносного кода в файлы.

Реализация

В приложении Фонарик используется таймер со специальным шрифтом, который хранится в папке assets проекта. Чтобы уменьшить размер APK файла, перепишем приложение, используя загружаемые шрифты.

Добавить загружаемые шрифты в своё приложение можно двумя способами.

Через Android Studio

Чтобы добавить таким способом, перейдём на разметку с виджетом, шрифт которого нужно изменить. На вкладке Design нужно кликнуть по виджету, затем в свойствах найти fontFamily и выбрать More fonts…

Откроется окно со списком всех шрифтов, доступных в Google Fonts, где можно выбрать любой понравившийся. Выберем шрифт Orbitron и нажмём ОК. Важно здесь выбрать именно Create downloable font, поскольку Add font to project просто добавит шрифт в проект, что противоречит текущей цели.

После этого Android Studio сама создаст необходимые файлы. В папке res/font будет создан файл orbitron.xml, в папке res/values файлы preloaded_fonts.xml и font_certs.xml.

orbitron.xml

Этот файл содержит определения для Android о семействе шрифтов. Как вы можете видеть, в нём перечислены fontProvider, fontProviderCerts, которые были автоматически созданы в Android Studio.

preloaded_fonts.xml

   @font/orbitron  

Android Studio создаёт этот файл, чтобы помочь предварительно загрузить шрифты. Это нужно, чтобы избежать задержки, когда шрифт не отображается при старте приложения. Рендеринг картинки является синхронным процессом, поэтому первый рендер может занять некоторое время, пока Android загружает шрифт. Объявление этого файла в манифесте нужно для того, чтобы приложение получило шрифт в начале работы, до отрисовки экрана.

Android Studio сама добавляет в манифест метатег, содержащий путь до файла preloaded_fonts.xml.

font_certs.xml

@array/com_google_android_gms_fonts_certs_dev @array/com_google_android_gms_fonts_certs_prod

Этот файл содержит огромные зашифрованные сертификаты, которые проверяют шрифты.

Теперь мы может просто указать в разметке у любого виджета свой шрифт в атрибуте fontFamily и увидеть результат.

Здесь новый шрифт используется только у одного виджета. Если вы хотите поменять шрифт всего приложения, вам нужно перейти в styles.xml и добавить его в тему вашего приложения.

 

Как использовать загружаемые шрифты на старых устройствах?

Для этого вам нужно добавить библиотеку поддержки в файл build.gradle модуля приложения.

compile "com.android.support:support-compat:27.0.1"

Кроме того, библиотека поддержка была перенесена в maven репозиторий Google, поэтому вам больше не нужен SDK Manager для загрузки библиотеки. Чтобы добавить maven репозиторий Google, добавьте следующую строку в repositories файла build.gradle модуля проекта.

repositories

Программное добавление загружаемых шрифтов

Чтобы добавить шрифт программно, нам понадобятся два класса:

  • FontRequest для создания запроса на получение шрифта
  • FontsContract для создания объекта Typeface после получения результата запроса шрифта

Приложение будет извлекать шрифты из провайдера с помощью API FontsContract. У каждого провайдера есть свой собственный набор ограничений на версии Android и язык запросов, который он поддерживает.

Итак, для начала создадим экземпляр класса FontRequest.

FontRequest fontRequest = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms", "Orbitron", R.array.com_google_android_gms_fonts_certs);

В параметрах указываются:

  • Владелец провайдера шрифтов
  • Пакет провайдера шрифтов для проверки личности провайдера
  • Строка запроса шрифта. О том, как формируется запрос, мы писали здесь.
  • Список сертификатов. Необязателен, если вы запрашиваете шрифты из предустановленных провайдеров, однако необходим, если используется библиотека поддержки.

Затем нужно создать экземпляр класса FontsContractCompat.FontRequestCallback, чтобы получить результат выполнения запроса в виде объекта Typeface или же сообщение об ошибке в случае неудачи.

FontsContractCompat.FontRequestCallback fontRequestCallback = new FontsContractCompat.FontRequestCallback() < @Override public void onTypefaceRetrieved(Typeface typeface) < pb.setTypeface(typeface); >@Override public void onTypefaceRequestFailed(int reason) < Toast.makeText(MainActivity.this, "Failed download font programmatically", Toast.LENGTH_LONG).show(); >>;

Теперь достаточно вызвать метод FontsContract.requestFont(), чтобы получить шрифт. Этот метод проверит, находится ли шрифт в кеше. Если его там нет, то он обращается к провайдеру шрифтов, чтобы извлечь шрифт и передать в callback.

FontsContract.requestFont(this, fontRequest, fontRequestCallback, getThreadHandler());

Как только FontRequestCallback получает объект Typeface, он устанавливает его в нужный виджет. Это наглядно можно увидеть на GIF ниже.

Заключение

Вот и всё! Теперь с помощью загружаемых шрифтов вы можете использовать огромный ассортимент самых разных шрифтов и при этом не увеличивать размер вашего APK файла.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *