Я пытаюсь определить макет GUI, используя файлы XML в Android. Насколько я могу судить, нет никакого способа указать, что ваши виджеты должны использовать собственный шрифт (например, тот, который вы поместили в assets / font /) в XML-файлах, и вы можете использовать только системные шрифты.
Я знаю, что в коде Java я мог изменить шрифт каждого виджета вручную, используя уникальные идентификаторы. В качестве альтернативы я мог бы перебрать все виджеты в Java, чтобы внести это изменение, но это, вероятно, будет очень медленным.
Какие еще варианты у меня есть? Есть ли лучшие способы сделать виджеты, которые имеют индивидуальный вид? Я не хочу вручную менять шрифт для каждого нового виджета, который я добавляю.
Ответы:
Вы можете расширить TextView для установки пользовательских шрифтов, как я узнал здесь .
TextViewPlus.java:
attrs.xml: (в res / values)
main.xml:
Вы должны поместить "saxmono.ttf" в папку ресурсов .
ОБНОВЛЕНИЕ 1/1/13
Есть серьезные проблемы с памятью с этим методом. Смотрите комментарий chedabob ниже.
источник
xmlns:foo="http://schemas.android.com/apk/res/com.example
Я опоздал на вечеринку на 3 года :( Однако это может быть полезно для тех, кто может наткнуться на этот пост.
Я написал библиотеку, которая кэширует гарнитуры, а также позволяет указывать пользовательские гарнитуры прямо из XML. Вы можете найти библиотеку здесь .
Вот как будет выглядеть ваш XML-макет, когда вы его используете.
источник
compile 'com.mobsandgeeks:android-typeface-textview:1.0'
но это не сработало.xmlns:geekui="http://schemas.android.com/apk/res-auto"
Это может быть немного поздно, но вам нужно создать одноэлементный класс, который возвращает пользовательский шрифт, чтобы избежать утечек памяти.
Класс TypeFace:
Пользовательский TextView:
По xml:
Программный:
источник
Старый вопрос, но я уверен, что хотел бы прочитать этот ответ здесь, прежде чем я начал собственный поиск хорошего решения. Каллиграфия расширяет
android:fontFamily
атрибут, добавляя поддержку пользовательских шрифтов в папке ресурсов, например:Единственное, что вам нужно сделать, чтобы активировать его, это подключить его к контексту действия, которое вы используете:
Вы также можете указать свой собственный атрибут для замены
android:fontFamily
Он также работает в темах, включая AppTheme.
источник
Использование DataBinding :
В XML:
файл шрифта должен быть в
assets/fonts/
источник
Если у вас есть только одна гарнитура, которую вы хотите добавить, и вы хотите писать меньше кода, вы можете создать выделенный TextView для вашего конкретного шрифта. Смотрите код ниже.
В main.xml теперь вы можете добавить свой textView так:
источник
Лучший способ сделать это в предварительной версии Android O:
1.) Щелкните правой кнопкой мыши по папке res и выберите « Создать»> «Каталог ресурсов Android» . Откроется
окно «Новый каталог ресурсов».
2.) В списке Тип ресурса выберите шрифт и нажмите кнопку ОК.
3.) Добавьте файлы шрифтов в папку шрифтов . Структура папок ниже генерирует R.font.dancing_script, R.font.la_la и R.font.ba_ba.
4.) Дважды щелкните файл шрифта, чтобы просмотреть шрифты файла в редакторе.
Далее мы должны создать семейство шрифтов
1.) Щелкните правой кнопкой мыши папку шрифтов и выберите « Создать»> «Файл ресурсов шрифта» . Откроется окно «Новый файл ресурсов».
2.) Введите имя файла и нажмите кнопку ОК . Новый ресурс шрифта XML открывается в редакторе.
3.) Включите каждый файл шрифта, стиль и атрибут веса в элемент тега шрифта. Следующий XML-код иллюстрирует добавление связанных со шрифтом атрибутов в XML-код ресурса шрифта:
Добавление шрифтов в TextView:
Как из документации
все шаги верны.
источник
Расширьте
TextView
и присвойте ему собственный атрибут или просто используйте атрибут android: tag, чтобы передать строку того шрифта, который вы хотите использовать. Вам нужно будет выбрать соглашение и придерживаться его, так как я помещу все свои шрифты в папку res / assets / fonts /, чтобы ваш класс TextView знал, где их найти. Затем в вашем конструкторе вы просто устанавливаете шрифт вручную после супер вызова.источник
Единственный способ использовать пользовательские шрифты - через исходный код.
Просто помните, что Android работает на устройствах с очень ограниченными ресурсами, и шрифты могут потребовать достаточного количества оперативной памяти. Встроенные шрифты Droid сделаны специально, и, если вы заметили, многие персонажи и декорации отсутствуют.
источник
У меня мог бы быть простой ответ на вопрос без расширения TextView и реализации длинного кода.
Код:
Поместите файл пользовательского шрифта в папку ресурсов как обычно и попробуйте это. Меня устраивает. Я просто не понимаю, почему Питер дал такой огромный код для этой простой вещи, или он дал свой ответ в старой версии.
источник
Также может быть определен в XML без создания пользовательских классов
style.xml
activity_main.xml
Небольшое замечание, потому что я просто всегда забывал, куда помещать шрифты, потому что шрифт должен быть внутри,
assets
и эта папка находится на том же уровне, чтоres
иsrc
, в моем случае, егоassets/fonts/ionicons.ttf
Обновлено Добавлен корневой макет, потому что этот метод должен
xmlns:app="http://schemas.android.com/apk/res-auto"
работатьОбновление 2 Забыл о библиотеке, которую я установил прежде, под названием Каллиграфия
источник
xmlns:app="http://schemas.android.com/apk/res-auto"
в свой корневой макет, проверьте обновленный ответ такжеОтвет Питера - лучший, но его можно улучшить, используя файл styles.xml из Android, чтобы настроить шрифты для всех текстовых представлений в вашем приложении.
Мой код здесь
источник
Есть два способа настройки шрифтов:
!!! мой собственный шрифт в assets / fonts / iran_sans.ttf
Способ 1: Refrection Typeface.class ||| лучший способ
вызов FontsOverride.setDefaultFont () в классе расширяет приложение, этот код приведет к изменению всех программных шрифтов, даже шрифтов Toasts
AppController.java
FontsOverride.java
Способ 2: использовать setTypeface
для особого просмотра просто вызовите setTypeface (), чтобы изменить шрифт.
CTextView.java
FontUtils.java
источник
Вот учебник, в котором показано, как настроить собственный шрифт, например, описанный @peter: http://responsiveandroid.com/2012/03/15/custom-fonts-in-android-widgets.html
он также учитывает потенциальные утечки памяти, аля http://code.google.com/p/android/issues/detail?id=9904 . Также в учебнике приведен пример установки пользовательского шрифта для кнопки.
источник
Вы можете легко сделать пользовательский класс textview: -
Итак, что вам нужно сделать в первую очередь, создать
Custom textview
класс с расширениемAppCompatTextView
.Теперь каждый раз при вызове Custom text view мы получим значение int из атрибута
int fontValue = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto","Lato-Regular.ttf",-1)
.Или
Мы также можем получить getTypeface () из представления, которое мы установили в нашем xml (
android:textStyle="bold|normal|italic"
). Так что делай, что хочешь.Теперь мы делаем
FontUtils
для установки любого шрифта .ttf на наш взгляд.источник
Может быть полезно знать, что начиная с Android 8.0 (уровень API 26) вы можете использовать собственный шрифт в XML .
Вы можете применить собственный шрифт ко всему приложению следующим образом.
Поместите шрифт в папку
res/font
.В
res/values/styles.xml
использовании это в теме приложения.<style name="AppTheme" parent="{whatever you like}"> <item name="android:fontFamily">@font/myfont</item> </style>
источник
Fontinator - это Android-библиотека, упрощающая использование пользовательских шрифтов. https://github.com/svendvd/Fontinator
источник
Вы не можете расширить TextView для создания виджета или использовать его в макете виджетов: http://developer.android.com/guide/topics/appwidgets/index.html
источник