Как установить пользовательский шрифт в .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