Android - Использование пользовательского шрифта

Я применил собственный шрифт к TextView, но, похоже, он не меняет гарнитуру.

Вот мой код:

    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
    TextView myTextView = (TextView)findViewById(R.id.myTextView);
    myTextView.setTypeface(myTypeface);

Может ли кто-нибудь вытащить меня из этой проблемы?


person RATTLESNAKE    schedule 06.09.2010    source источник
comment
В вашем синтаксисе ошибка, должно быть myTextView.setTypeface(myTypeface);   -  person yuttadhammo    schedule 03.09.2011
comment
Этот поток похож на: stackoverflow.com/a/14558090/693752   -  person Snicolas    schedule 28.01.2013
comment
Посмотрите на рабочий пример javatechig.com/2013 / 03/19 / using-external-fonts-in-android-view   -  person Nilanchal    schedule 08.04.2013
comment
Здесь у вас есть эффективный способ изменить шрифт для всего приложения: stackoverflow.com/questions/18847531/   -  person Diego Palomar    schedule 31.10.2013
comment
Попробовав большинство решений, описанных в этой ветке, я случайно нашел Calligraphy - библиотеку Кристофера Дженкинса (github.com/ chrisjenx / Calligraphy), который позволяет легко добавлять пользовательские шрифты в ваше приложение. Преимущества его библиотеки по сравнению с подходами, предлагаемыми здесь: 1. вам не нужно вводить собственный переопределяемый компонент TextView, вы используете встроенный TextView 2. вы можете легко включить библиотеку с помощью gradle 3. Библиотека не требует ' t ограничивать выбор шрифтов; вы просто добавляете свои предпочтения в каталог ресурсов.   -  person javaxian    schedule 26.05.2014


Ответы (21)


На Mobiletuts + есть очень хороший учебник по форматированию текста для Android. Совет: настройте Android Шрифты

РЕДАКТИРОВАТЬ: Протестировал сам. Вот решение. Вы можете использовать подпапку под названием fonts, но она должна находиться в папке assets, а не в папке res. Так

активы / шрифты

Также убедитесь, что окончание шрифта, я имею в виду окончание самого файла шрифта, написано в нижнем регистре. Другими словами, это не должно быть myFont.TTF, а myfont.ttf здесь должно быть строчными буквами

person Octavian A. Damiean    schedule 06.09.2010
comment
Отредактировал мой ответ с решением сейчас. - person Octavian A. Damiean; 06.09.2010
comment
Не могли бы вы прислать мне какой-нибудь рабочий демонстрационный проект? Я пробовал как в папке assets / fonts / xyz.ttf, так и в папке assets / xyz.ttf, но этот шрифт не используется. Отображает только шрифт по умолчанию .. - person RATTLESNAKE; 06.09.2010
comment
Конечно, вот ссылка на заархивированный проект. dl.dropbox.com/u/8288893/customFont.zip - person Octavian A. Damiean; 06.09.2010
comment
Если вы следуете этому руководству, убедитесь, что вы используете путь Typeface.createFromAsset (getAssets (), fonts / yourfont.ttf); если вы поместили его в подкаталог шрифтов - person Jameo; 06.03.2013
comment
не включайте assets / в имя файла (потому что функция createFromAsset напрямую указывает на каталог assets) - person topher; 29.10.2013
comment
Я обновил свой Nexus 7 до Lollipop, и это решение перестало работать. Работал до KitKat. Любые идеи? - person Nublodeveloper; 18.11.2014
comment
Пожалуйста, обратитесь к моему ответу, это не полное решение. - person Oliver Dixon; 09.12.2016
comment
Более новые версии Android Studio вместе с Android O позволяют создавать папку шрифтов внутри папки res. См. Обновленный ответ Дживана ниже. - person albert c braun; 21.05.2017
comment
Привет, я использую LG G4. Я не вижу никаких папок с активами в моем файловом проводнике. Может кто-нибудь подскажет где это ?? - person ; 17.06.2017
comment
WTH Bruv. этот способ должен быть в нижнем регистре. Я ломал себе голову на этом с 3 часов. Спасибо - person Diaz diaz; 11.06.2018

Попробовав большинство решений, описанных в этой ветке, я случайно нашел Каллиграфию (https://github.com/chrisjenx/Calligraphy) - библиотека Кристофера Дженкинса, которая позволяет легко добавлять пользовательские шрифты в ваше приложение. Преимущества его библиотеки по сравнению с предлагаемыми здесь подходами:

  1. вам не нужно вводить свой собственный переопределенный компонент TextView, вы используете встроенный TextView
  2. вы можете легко включить библиотеку с помощью gradle
  3. Библиотека не ограничивает ваш выбор шрифтов; вы просто добавляете свои предпочтительные в каталог ресурсов
  4. вы не только получаете настраиваемые текстовые представления - все другие текстовые компоненты Android также будут отображаться с использованием вашего настраиваемого шрифта.
person javaxian    schedule 26.05.2014
comment
Каков размер этой библиотеки - важный вопрос, потому что это повлияет на размер приложения. - person eRaisedToX; 18.04.2017

Я знаю, что уже есть хорошие ответы, но вот полностью рабочая реализация.

Вот пользовательское текстовое представление:

package com.mycompany.myapp.widget;

/**
 * Text view with a custom font.
 * <p/>
 * In the XML, use something like {@code customAttrs:customFont="roboto-thin"}. The list of fonts
 * that are currently supported are defined in the enum {@link CustomFont}. Remember to also add
 * {@code xmlns:customAttrs="http://schemas.android.com/apk/res-auto"} in the header.
 */
public class CustomFontTextView extends TextView {

    private static final String sScheme =
            "http://schemas.android.com/apk/res-auto";
    private static final String sAttribute = "customFont";

    static enum CustomFont {
        ROBOTO_THIN("fonts/Roboto-Thin.ttf"),
        ROBOTO_LIGHT("fonts/Roboto-Light.ttf");

        private final String fileName;

        CustomFont(String fileName) {
            this.fileName = fileName;
        }

        static CustomFont fromString(String fontName) {
            return CustomFont.valueOf(fontName.toUpperCase(Locale.US));
        }

        public Typeface asTypeface(Context context) {
            return Typeface.createFromAsset(context.getAssets(), fileName);
        }
    }

    public CustomFontTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

        if (isInEditMode()) {
            return;
        } else {
            final String fontName = attrs.getAttributeValue(sScheme, sAttribute);

            if (fontName == null) {
                throw new IllegalArgumentException("You must provide \"" + sAttribute + "\" for your text view");
            } else {
                final Typeface customTypeface = CustomFont.fromString(fontName).asTypeface(context);
                setTypeface(customTypeface);
            }
        }
    }
}

Вот настраиваемые атрибуты. Это должно перейти в ваш res/attrs.xml файл:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomFontTextView">
        <attr name="customFont" format="string"/>
    </declare-styleable>
</resources>

И вот как вы это используете. Я использую относительный макет, чтобы обернуть его и показать объявление customAttr, но, очевидно, это может быть любой макет, который у вас уже есть.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customAttrs="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.mycompany.myapp.widget.CustomFontTextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="foobar"
         customAttrs:customFont="roboto_thin" />

</RelativeLayout>
person espinchi    schedule 28.09.2014
comment
Что означает customAttrs в моем проекте? - person Skynet; 12.01.2016
comment
@Skynet относится к пространству имен, определенному в вашем корневом представлении, которое равно xmlns:customAttrs="http://schemas.android.com/apk/res-auto". При этом автоматически устанавливаются атрибуты для настраиваемых представлений. В этом случае у вас есть атрибут customFont, определенный в attrs.xml. Более простой способ понять - посмотреть xmlns:android="http://schemas.android.com/apk/res/android", который определяет пространство имен для ваших атрибутов android. Так что если вы измените это на a, тогда вместо android:text будет a:text. - person CodyEngel; 19.03.2016

Я успешно использовал это раньше. Единственная разница между нашими реализациями в том, что я не использовал подпапку в активах. Не уверен, что это что-то изменит.

person benvd    schedule 06.09.2010

При условии, что вы поместили шрифт в нужное место и в самом файле шрифта нет ошибок, ваш код должен работать так, RATTLESNAKE.

Однако было бы намного проще, если бы вы могли просто определить шрифт в своем макете xml, например:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <!-- This text view is styled with the app theme -->
    <com.innovattic.font.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This uses my font in bold italic style" />

    <!-- This text view is styled here and overrides the app theme -->
    <com.innovattic.font.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:flFont="anotherFont"
        android:textStyle="normal"
        android:text="This uses another font in normal style" />

    <!-- This text view is styled with a style and overrides the app theme -->
    <com.innovattic.font.FontTextView
        style="@style/StylishFont"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This also uses another font in normal style" />

</LinearLayout>

С сопутствующим res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    <!-- Application theme -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <item name="android:textViewStyle">@style/MyTextViewStyle</item>
    </style>

    <!-- Style to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextViewStyle" parent="@android:style/Widget.Holo.Light.TextView">
        <item name="android:textAppearance">@style/MyTextAppearance</item>
    </style>

    <!-- Text appearance to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextAppearance" parent="@android:style/TextAppearance.Holo">
        <!-- Alternatively, reference this font with the name "aspergit" -->
        <!-- Note that only our own TextView's will use the font attribute -->
        <item name="flFont">someFont</item>
        <item name="android:textStyle">bold|italic</item>
    </style>

    <!-- Alternative style, maybe for some other widget -->
    <style name="StylishFont">
        <item name="flFont">anotherFont</item>
        <item name="android:textStyle">normal</item>
    </style>

</resources>

Специально для этого я создал пару инструментов. Обратитесь к этому проекту на GitHub или взгляните на этот сообщение в блоге, в котором все объясняется.

person Jelle Fresen    schedule 03.03.2014

Лучший способ сделать это в предварительной версии Android O:

Это работает, только если у вас Android Studio 2.4 или выше

  1. Щелкните правой кнопкой мыши папку res и выберите Создать> Каталог ресурсов Android. Откроется окно "Новый каталог ресурсов
    ".
  2. В списке Тип ресурса выберите шрифт, а затем нажмите OK.
  3. Добавьте файлы шрифтов в папку шрифтов. В приведенной ниже структуре папок формируются R.font.dancing_script, R.font.la_la и R.font.ba_ba.
  4. Дважды щелкните файл шрифта, чтобы просмотреть шрифты файла в редакторе.

Далее мы должны создать семейство шрифтов:

  1. Щелкните правой кнопкой мыши папку шрифтов и выберите Создать> Файл ресурсов шрифта. Откроется окно "Новый файл ресурсов".
  2. Введите Имя файла и нажмите OK. В редакторе откроется новый ресурс шрифта XML.
  3. Включите каждый файл шрифта, стиль и атрибут веса в элемент тега шрифта. Следующий XML-код иллюстрирует добавление атрибутов, связанных со шрифтом, в XML-ресурс шрифта:

Добавление шрифтов в TextView:

   <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/hey_fontfamily"/>

Как из документации

Работа со шрифтами

Все шаги правильные.

person jeevan s    schedule 04.04.2017
comment
только api ›26 (( - person maXp; 21.07.2017
comment
Здесь отсутствует довольно большой шаг №3 ... Как вы это делаете? - person Code Wiget; 24.03.2020

Для пользовательских шрифтов в Android создайте папку в папке с ресурсами, назовите ее «шрифты», поместите в нее желаемый файл fonts.ttf или .otf.

Если вы расширяете UIBaseFragment:

Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Arial.ttf");
        tv.setTypeface(font);

иначе, если расширяет Activity:

Typeface font = Typeface.createFromAsset(getContext().getAssets(), "fonts/Arial.ttf");
        tv.setTypeface(font);
person Faakhir    schedule 03.09.2014

Вы можете использовать PixlUI на странице https://github.com/neopixl/PixlUI.

импортировать их .jar и использовать в XML

 <com.neopixl.pixlui.components.textview.TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    pixlui:typeface="GearedSlab.ttf" />
person guest2343sdfdfs    schedule 07.08.2013

Поскольку меня не устроили все представленные решения на SO, я придумал свое. Он основан на небольшом трюке с тегами (т.е. вы не можете использовать теги в своем коде), я поместил туда путь к шрифту. Итак, при определении представлений вы можете сделать следующее:

<TextView
        android:id="@+id/textViewHello1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World 1"
        android:tag="fonts/Oswald-Regular.ttf"/>

или это:

<TextView
        android:id="@+id/textViewHello2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World 2"
        style="@style/OswaldTextAppearance"/>

<style name="OswaldTextAppearance">
        <item name="android:tag">fonts/Oswald-Regular.ttf</item>
        <item name="android:textColor">#000000</item>
</style>

Теперь вы можете явно получить доступ / настроить представление как:

TextView textView = TextViewHelper.setupTextView(this, R.id.textViewHello1).setText("blah");

или просто настройте все через:

TextViewHelper.setupTextViews(this, (ViewGroup) findViewById(R.id.parentLayout)); // parentLayout is the root view group (relative layout in my case)

А что такое магический класс, спросите вы? В основном склеены из других сообщений SO, с вспомогательными методами как для активности, так и для фрагментов:

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.HashMap;
import java.util.Map;

public class TextViewHelper {
    private static final Map<String, Typeface> mFontCache = new HashMap<>();

    private static Typeface getTypeface(Context context, String fontPath) {
        Typeface typeface;
        if (mFontCache.containsKey(fontPath)) {
            typeface = mFontCache.get(fontPath);
        } else {
            typeface = Typeface.createFromAsset(context.getAssets(), fontPath);
            mFontCache.put(fontPath, typeface);
        }
        return typeface;
    }

    public static void setupTextViews(Context context, ViewGroup parent) {
        for (int i = parent.getChildCount() - 1; i >= 0; i--) {
            final View child = parent.getChildAt(i);
            if (child instanceof ViewGroup) {
                setupTextViews(context, (ViewGroup) child);
            } else {
                if (child != null) {
                    TextViewHelper.setupTextView(context, child);
                }
            }
        }
    }

    public static void setupTextView(Context context, View view) {
        if (view instanceof TextView) {
            if (view.getTag() != null) // also inherited from TextView's style
            {
                TextView textView = (TextView) view;
                String fontPath = (String) textView.getTag();
                Typeface typeface = getTypeface(context, fontPath);
                if (typeface != null) {
                    textView.setTypeface(typeface);
                }
            }
        }
    }

    public static TextView setupTextView(View rootView, int id) {
        TextView textView = (TextView) rootView.findViewById(id);
        setupTextView(rootView.getContext().getApplicationContext(), textView);
        return textView;
    }

    public static TextView setupTextView(Activity activity, int id) {
        TextView textView = (TextView) activity.findViewById(id);
        setupTextView(activity.getApplicationContext(), textView);
        return textView;
    }
}
person Miro Kropacek    schedule 12.08.2016

К сожалению, для этого нет хорошего решения.

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

Вы можете использовать внешнюю утилиту шрифтов, например:

Инструмент каллиграфического шрифта

НО Это циклически перебирает каждое представление в приложении при его создании, и даже эта утилита пропускает некоторые представления (ViewPager отображает обычный шрифт), тогда у вас есть проблема в том, что когда Google обновляет свои инструменты сборки, это иногда дает сбой, потому что он должен ориентироваться на устаревшие свойства. Это также немного медленнее, так как использует Java's Reflection.

Google действительно должен это исправить. Нам нужна лучшая поддержка шрифтов в Android. Если вы посмотрите на решение от iOS, у них буквально есть сотни встроенных шрифтов, из которых можно выбирать. Хотите собственный шрифт? Просто вставьте TFF, и его можно будет использовать.

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

person Oliver Dixon    schedule 09.12.2016

Обязательно вставьте приведенный выше код в onCreate () после вашего вызова super и вызова setContentView (). Эта маленькая деталь заставила меня некоторое время повесить трубку.

person Jaxon    schedule 15.05.2013

В Android 8.0 использование пользовательских шрифтов в приложении стало простым downloadable fonts. Мы можем добавлять шрифты прямо в res/font/ folder в папке проекта, и при этом шрифты автоматически становятся доступными в Android Studio.

Папка в папке res с именем font и type, установленными на Font

Теперь установите атрибут fontFamily для списка шрифтов или нажмите еще и выберите шрифт по вашему выбору. Это добавит tools:fontFamily="@font/your_font_file" строку в ваш TextView.

Будет автоматически создано несколько файлов.

1. В папке значений будет создано fonts_certs.xml.

2. В манифесте добавляются следующие строки:

  <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" /> 

3. preloaded_fonts.xml

<resources>
    <array name="preloaded_fonts" translatable="false">
        <item>@font/open_sans_regular</item>
        <item>@font/open_sans_semibold</item>
    </array>
</resources>
person Dipali Shah    schedule 07.12.2017

Вы можете использовать легкую и простую EasyFonts стороннюю библиотеку, чтобы установить множество пользовательских шрифтов для вашего TextView. Используя эту библиотеку, вам не нужно беспокоиться о загрузке и добавлении шрифтов в папку assets / fonts. Также о создании объекта Typeface.

Вместо того

Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);

Просто:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));

Эта библиотека также предоставляет следующие начертания шрифтов.

  • Робото
  • Droid Serif
  • Робот-дроид
  • Свобода
  • Fun Raiser
  • Android Nation
  • Зеленый авокадо
  • Признание
person Vijay Vankhede    schedule 25.06.2015

У меня была такая же проблема, не появлялся TTF. Я изменил файл шрифта, и с тем же кодом он работает.

person Roozbeh Zabihollahi    schedule 18.05.2013

Если вы хотите загрузить шрифт из сети или легко его стилизовать, вы можете использовать:

https://github.com/shellum/fontView

Пример:

<!--Layout-->
<com.finalhack.fontview.FontView
        android:id="@+id/someFontIcon"
        android:layout_width="80dp"
        android:layout_height="80dp" />

//Java:
fontView.setupFont("http://blah.com/myfont.ttf", true, character, FontView.ImageType.CIRCLE);
fontView.addForegroundColor(Color.RED);
fontView.addBackgroundColor(Color.WHITE);
person Shellum    schedule 29.05.2013

Что ж, через семь лет вы можете легко изменить все приложение textView или то, что хотите, используя android.support библиотеки 26 ++.

E.g:

Создайте пакет шрифтов app / src / res / font и переместите в него свой шрифт.

введите здесь описание изображения

И в своей теме приложения просто добавьте его как fontFamily:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   . . . ...
    <item name="android:fontFamily">@font/demo</item>
</style>

Пример использования только с textView:

<style name="fontTextView" parent="@android:style/Widget.TextView">
    <item name="android:fontFamily">monospace</item>
</style>

И добавьте в свою основную тему:

<item name="android:textViewStyle">@style/fontTextView</item>

В настоящее время он работает над 8.1–4.1 API Jelly Bean. И это широкий диапазон.

person Community    schedule 01.11.2017

Обновить ответ: Android 8.0 (уровень API 26) представляет новую функцию - «Шрифты в XML». просто используйте функцию «Шрифты в XML» на устройствах под управлением Android 4.1 (уровень API 16) и выше, используйте библиотеку поддержки 26.

см. эту ссылку


Старый ответ

Есть два способа настроить шрифты:

!!! мой собственный шрифт в assets / fonts / iran_sans.ttf



Способ 1: Refrection Typeface.class ||| лучший способ

вызовите FontsOverride.setDefaultFont () в классе extends Application, этот код приведет к изменению всех программных шрифтов, даже шрифтов тостов

AppController.java

public class AppController extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //Initial Font
        FontsOverride.setDefaultFont(getApplicationContext(), "MONOSPACE", "fonts/iran_sans.ttf");

    }
}

FontsOverride.java

public class FontsOverride {

    public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    private static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
        try {
            final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
            staticField.setAccessible(true);
            staticField.set(null, newTypeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}



Способ 2. используйте setTypeface

для специального просмотра просто вызовите setTypeface (), чтобы изменить шрифт.

CTextView.java

public class CTextView extends TextView {

    public CTextView(Context context) {
        super(context);
        init(context,null);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context,attrs);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context,attrs);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context,attrs);
    }

    public void init(Context context, @Nullable AttributeSet attrs) {

        if (isInEditMode())
            return;

        // use setTypeface for change font this view
        setTypeface(FontUtils.getTypeface("fonts/iran_sans.ttf"));

    }
}

FontUtils.java

public class FontUtils {

    private static Hashtable<String, Typeface> fontCache = new Hashtable<>();

    public static Typeface getTypeface(String fontName) {
        Typeface tf = fontCache.get(fontName);
        if (tf == null) {
            try {
                tf = Typeface.createFromAsset(AppController.getInstance().getApplicationContext().getAssets(), fontName);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
            fontCache.put(fontName, tf);
        }
        return tf;
    }

}
person Rasoul Miri    schedule 04.11.2017

Правильный способ сделать это для API 26 описан в официальной документации здесь:

https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html.

Это включает в себя размещение файлов ttf в папке res / font и создание файла семейства шрифтов.

person Arunabh Das    schedule 28.09.2017

Самое простое решение, поддерживаемое Android!

Использовать собственный шрифт в xml:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/[your font resource]"/>

смотреть подробности:

https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html.

person mrtwo    schedule 05.01.2018

  • Откройте свой проект и выберите Проект в левом верхнем углу.
  • app -> src -> main
  • Щелкните правой кнопкой мыши на главном и создайте каталог, назовите его активы
  • Щелкните правой кнопкой мыши, чтобы собрать и создать новый каталог, назовите его шрифты
  • вам нужно найти бесплатные шрифты, такие как бесплатные шрифты
  • передайте его своему Textview и вызовите его в своем классе Activity
  • скопируйте шрифты в папку fonts
  • TextView txt = (TextView) findViewById(R.id.txt_act_spalsh_welcome); Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Aramis Italic.ttf"); txt.setTypeface(font);

название шрифта должно быть правильным и получать удовольствие

person Sam    schedule 29.01.2018

Да, как сказал Dipali s, загружаемые шрифты очень просты.

Вот как вы это делаете ...

  1. Поместите TextView.
  2. На панели свойств выберите раскрывающийся список fontFamily. Если его там нет, найдите значок каретки (> и щелкните по нему, чтобы развернуть textAppearance) под.
  3. Разверните раскрывающийся список font-family.
  4. Прокрутите маленький список до конца, пока не увидите more fonts.
  5. Откроется диалоговое окно, в котором вы можете искать в Google Fonts
  6. Найдите нужный шрифт в строке поиска вверху
  7. Выберите свой шрифт.
  8. Выберите стиль шрифта, который вам нравится (например, полужирный, нормальный, курсив и т. Д.)
  9. На правой панели выберите переключатель с надписью Add font to project
  10. Нажмите "ОК". Теперь у вашего TextView есть шрифт, который вам нравится!

БОНУС: если вы хотите стилизовать ВСЕ с текстом в вашем приложении с выбранным шрифтом, просто добавьте <item name="android:fontfamily">@font/fontnamehere</item> в свой styles.xml

person flash76    schedule 13.12.2017
comment
Вы должны были оценить мой ответ, чем! :) - person Dipali Shah; 15.12.2017