Как установить пользовательский шрифт в .xml файле вместо файла .java?

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

Но я не могу использовать пользовательские шрифты в .xml файле, для этого мне нужно инициализировать каждый текстовый файл в .java файле.

Этот процесс слишком долгий и длительный.

Если кто-нибудь знает, тогда, пожалуйста, помогите мне...

Ответ 1

Для справки,

 public class MyTextView extends TextView {

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyTextView(Context context) {
        super(context);
        init();
    }

    public void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/yourfont.ttf");
        setTypeface(tf ,1);

    }
}

В XML,

 <you_package.MyTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"       
        android:textSize="20sp"
        android:text="Your text"
        />

Ответ 2

Android API 16+

Начиная с Android 8.0 (API 26), есть встроенная поддержка для установки шрифтов в XML. Однако использование библиотеки поддержки расширяет ее до Android 4.1 (API 16).

enter image description here

1. Добавьте шрифт в свой проект

  • Щелкните правой кнопкой мыши папку res и выберите " Создать"> "Каталог ресурсов Android". Введите font как имя и шрифт в качестве типа ресурса.
  • Скопируйте и вставьте шрифт в новый каталог res/font. Я просто использую один шрифт в моем примере, обычный шрифт сценария танца. Я переименовал его в dancing_script.ttf чтобы избежать каких-либо потенциальных проблем с именами с верхним регистром или незаконными символами.

2. Создайте XML файл font-family.

  • Щелкните правой кнопкой мыши папку res/font и выберите " New > Font Resource File. Назовите это, как хотите. Я my_custom_font.xml мой my_custom_font.xml.
  • Вставьте следующий код. Обратите внимание, что атрибуты устанавливаются дважды, один раз для android (API 26+) и один раз для app (API 16+).

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <font
            android:fontStyle="normal"
            android:fontWeight="400"
            android:font="@font/dancing_script"
            app:fontStyle="normal"
            app:fontWeight="400"
            app:font="@font/dancing_script"
            />
    </font-family>
    

3. Установите шрифт в формате XML.

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

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:fontFamily="@font/my_custom_font" />

Заметки

Ответ 3

Используйте библиотеку, которая предлагает это, например, " Каллиграфия".

Или используйте библиотеку привязки данных Google, чтобы "привязать" шрифт к вашим виджетам, как описано Lisa Wray.

Ответ 4

Согласно документации

Android 8.0 (API-уровень 26) представляет новую функцию "Шрифты в XML", которая позволяет использовать шрифты в качестве ресурсов. Вы можете добавить файл шрифта в папку res/font/, чтобы объединить шрифты в качестве ресурсов. Эти шрифты скомпилированы в вашем R файле и автоматически доступны в Android Studio. Вы можете получить доступ к ресурсам шрифтов с помощью нового типа ресурса, шрифта. Например, чтобы получить доступ к ресурсу шрифта, используйте @font/myfont или R.font.myfont. Чтобы использовать функцию "Шрифты в XML" на устройствах под управлением Android API версии 14 и выше, используйте библиотеку поддержки 26.

Чтобы добавить шрифты в качестве ресурсов, выполните следующие шаги в Android Studio:

1. Щелкните правой кнопкой мыши папку res и выберите "Создать"> "Каталог ресурсов Android". Откроется окно "Каталог новых ресурсов".

2.В списке "Тип ресурса" выберите шрифт и нажмите "ОК". Примечание. Имя каталога ресурсов должно быть шрифтом.

3. Добавьте файлы шрифтов в папку шрифтов.

Создание семейства шрифтов

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

Чтобы создать семейство шрифтов, выполните следующие шаги в Android Studio:

1. Щелкните правой кнопкой мыши папку шрифтов и выберите "Создать"> "Файл шрифтов". Откроется окно "Новый файл ресурсов".

2.Введите имя файла и нажмите кнопку ОК. Новый редактор шрифтов XML открывается в редакторе.

3. Внесите в элемент каждый атрибут файла шрифта, стиля и веса. Следующий XML иллюстрирует добавление атрибутов, связанных шрифтом, в XML-ресурс шрифта:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

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

В XML файле макета установите атрибут fontFamily в файл шрифта, к которому вы хотите получить доступ.

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

Откройте окно "Свойства", чтобы установить шрифт для TextView. Выберите вид, чтобы открыть окно "Свойства". Примечание. Окно "Свойства" доступно только тогда, когда редактор проекта открыт. Выберите вкладку "Дизайн" в нижней части окна.

Разверните свойство textAppearance, а затем выберите шрифт из списка fontFamily.

Добавление шрифтов в стиль

Откройте styles.xml и установите атрибут fontFamily в файл шрифта, к которому вы хотите получить доступ.

 <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
    <item name="android:fontFamily">@font/lobster</item>
</style>

Ответ 5

Вы можете просто использовать собственное текстовое представление, например

public class HelveticaRagularTextView extends TextView {

public HelveticaRagularTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(attrs);
}

public HelveticaRagularTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(attrs);

}

public HelveticaRagularTextView(Context context) {
    super(context);
    init(null);
}

private void init(AttributeSet attrs) {
    // Just Change your font name
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), getContext().getResources().getString(R.string.font_helvetica_regular));
    setTypeface(myTypeface);
}

}

Теперь вы можете использовать HelveticaRagularTextView в вашем xml.

Это очень просто использовать

Ответ 6

Расширьте пользовательский класс из TextView и настройте шрифт в классе. Затем вы сможете использовать этот настраиваемый класс textview в xml, и вам не нужно будет динамически настраивать шрифты в вашем коде.

Удачи.

Ответ 7

Загрузите файл ttf шрифта, который вы хотите использовать, и вставьте его в

src- > Main- > assets- > font.ttf

Затем для использования ttf вам необходимо выполнить следующие

для установки этого шрифта на определенный текст выполните следующие действия

   TextView tv_the = (TextView) findViewById(R.id.the);
    Typeface face = Typeface.createFromAsset(getAssets(), "font.ttf");
    tv_the.setTypeface(face);

Если вы хотите установить собственный шрифт для всего действия, выполните следующие

final ViewGroup mContainer = (ViewGroup) findViewById(android.R.id.content).getRootView();
        final Typeface mFont = Typeface.createFromAsset(getAssets(), "badoni2.ttf");
        Parameters.setAppFont(mContainer, mFont);

и добавьте класс Параметры в ваше приложение

public class Parameters {

public static final void setAppFont(ViewGroup mContainer, Typeface mFont) {
    if (mContainer == null || mFont == null)
        return;

    final int mCount = mContainer.getChildCount();

    // Loop through all of the children.
    for (int i = 0; i < mCount; ++i) {
        final View mChild = mContainer.getChildAt(i);
        if (mChild instanceof TextView) {
            // Set the font if it is a TextView.
            ((TextView) mChild).setTypeface(mFont);
        } else if (mChild instanceof ViewGroup) {
            // Recursively attempt another ViewGroup.
            setAppFont((ViewGroup) mChild, mFont);
        }

    }
}

Попробуйте это и сообщите мне, если он сработает для вас

Ответ 8

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

Пожалуйста, перейдите по этой ссылкеhttps://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts