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

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

  • автор:

Android – пользовательские шрифты

В Android вы можете определить свои собственные шрифты для строк в вашем приложении. Вам просто нужно скачать нужный шрифт из Интернета, а затем поместить его в папку assets / fonts.

Поместив шрифты в папку assets в папке fonts, вы можете получить к ней доступ в своем Java-коде через класс Typeface. Сначала получите ссылку на текстовое представление в коде. Его синтаксис приведен ниже –

TextView tx = (TextView)findViewById(R.id.textview1);

Следующее, что вам нужно сделать, это вызвать статический метод класса Typeface createFromAsset (), чтобы получить ваш собственный шрифт из ресурсов. Его синтаксис приведен ниже –

Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/font name.ttf");

Последнее, что вам нужно сделать, это установить этот объект пользовательского шрифта в свойстве TextView Typeface. Вам нужно вызвать метод setTypeface (), чтобы сделать это. Его синтаксис приведен ниже –

tx.setTypeface(custom_font);

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

создать (String familyName, int style)

Создайте объект Typeface с указанием фамилии и информации о стиле опции

создать (семейство гарнитур, int style)

Создайте объект гарнитуры, который лучше всего соответствует указанной существующей гарнитуре и указанному стилю

createFromFile (String path)

Создать новую гарнитуру из указанного файла шрифта

defaultFromStyle (int style)

Возвращает один из объектов Typeface по умолчанию на основе указанного стиля

Возвращает атрибуты встроенного стиля шрифта

создать (String familyName, int style)

Создайте объект Typeface с указанием фамилии и информации о стиле опции

создать (семейство гарнитур, int style)

Создайте объект гарнитуры, который лучше всего соответствует указанной существующей гарнитуре и указанному стилю

createFromFile (String path)

Создать новую гарнитуру из указанного файла шрифта

defaultFromStyle (int style)

Возвращает один из объектов Typeface по умолчанию на основе указанного стиля

Возвращает атрибуты встроенного стиля шрифта

пример

Вот пример, демонстрирующий использование Typeface для обработки CustomFont. Он создает основное приложение, которое отображает пользовательский шрифт, который вы указали в файле шрифтов.

Чтобы поэкспериментировать с этим примером, вы можете запустить его на реальном устройстве или в эмуляторе.

меры Описание
1 Вы будете использовать Android Studio IDE для создания приложения Android в пакете com.example.sairamkrishna.myapplication.
2 Загрузите шрифт из Интернета и поместите его в папку assets / fonts.
3 Измените файл src / MainActivity.java, чтобы добавить необходимый код.
4 Измените res / layout / activity_main, чтобы добавить соответствующие компоненты XML
5 Запустите приложение и выберите работающее устройство Android, установите на него приложение и проверьте результаты.

Перед вводом в часть кода добавьте шрифты в папку «assests» из проводника Windows.

Учебное пособие по загрузке Anroid

Ниже приводится содержимое измененного основного файла активности MainActivity.java .

package com.example.sairamkrishna.myapplication; import android.graphics.Typeface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends ActionBarActivity  TextView tv1,tv2; protected void onCreate(Bundle savedInstanceState)  super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1=(TextView)findViewById(R.id.textView3); tv2=(TextView)findViewById(R.id.textView4); Typeface face= Typeface.createFromAsset(getAssets(), "font/font.ttf"); tv1.setTypeface(face); Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf"); tv2.setTypeface(face1); > >

Ниже приведено измененное содержимое файла xml activity_main.xml .

xml version="1.0" encoding="utf-8"?>  xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Typeface" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials Point" android:id="@+id/textView2" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:textSize="35dp" android:textColor="#ff16ff01" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials Point" android:id="@+id/textView3" android:layout_centerVertical="true" android:textSize="45dp" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials Point" android:id="@+id/textView4" android:layout_below="@+id/textView3" android:layout_alignLeft="@+id/textView3" android:layout_alignStart="@+id/textView3" android:layout_marginTop="73dp" android:textSize="45dp" /> 

Ниже приводится содержимое файла res / values ​​/ string.xml .

 My Application  

Ниже приводится содержимое файла AndroidManifest.xml .

Eclipse Run Icon

Давайте попробуем запустить наше приложение Custom Font, которое мы только что изменили. Я предполагаю, что вы создали свой AVD во время настройки среды. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок на панели инструментов. Android Studio устанавливает приложение на AVD и запускает его, и, если все в порядке с настройками и приложением, оно отобразится в следующем окне эмулятора –

Учебное пособие по загрузке Anroid

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

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

Использование 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 файла.

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

Как добавить в приложение свой шрифт и присвоить элементу 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 и кастомные шрифты или «Да здравствует API 26»

Если было много view где требовались нестандартные шрифты, то мы использовали что-то вроде такого:

view.xml
CustomFontTextView.class
Typeface myCustomFontBold = Typeface.createFromAsset(getAssets(), "fonts/myCustomFont-Bold.otf"); setTypeface(myCustomFontBold); 

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

app:my_typeface="myCustomFontBold" 

Ну, или шли на гитхаб и в результате находили Calligraphy (7000 звезд!)

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

Но все изменилось в API 26

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

Линк для тех, кто любит читать в оригинале.

Теперь подключение состоит всего из нескольких несложных шагов:

1. Создаем папку font в res
Resource type выбираем font

image

2. Перетаскиваем в новую папку все нужные нам в проекте шрифты

3. Создаем файл для семейства шрифтов.

Обратите внимание: я сразу добавил в пример то как должен выглядеть файл, если вы хотите поддерживать и более старые версии Андроида. (Начиная с 14). Если вам повезло и у вас таргет только на супер-новые девайсы, то ваш файл сократится в 2 раза

Вариант для API >= 26
lobster.xml

Ну а дальше остается только наслаждаться сборкой

Использование в TextView

Используем в стилях

  

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

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