Я хочу использовать собственный шрифт для своего приложения для Android, которое я создаю.
Я могу индивидуально изменить шрифт каждого объекта из кода, но у меня их сотни.
Так,
- Есть ли способ сделать это из XML? [Установка собственного шрифта]
- Есть ли способ сделать это из кода в одном месте, чтобы сказать, что все приложение и все компоненты должны использовать настраиваемый шрифт вместо шрифта по умолчанию?
Ответы:
Нет извините. Вы можете указать только встроенные шрифты через XML.Не то, чтобы я знаю.В настоящее время для них существует множество вариантов:
Ресурсы шрифтов и резервные копии в Android SDK, если вы используете
appcompat
Сторонние библиотеки для тех, кто не использует
appcompat
, хотя не все будут поддерживать определение шрифта в ресурсах макета.источник
Да, это возможно.
Вы должны создать собственное представление, расширяющее текстовое представление.
В
attrs.xml
вvalues
папке:В
main.xml
:В
MyTextView.java
:источник
TextView
. Для этого потребуются настраиваемые подклассы для каждого класса виджетов, который наследуется от того,TextView
где требуется такая же возможность.Я сделал это более «грубой силой», не требуя изменений в макете xml или Activity.
Проверено на Android версий с 2.1 по 4.4. Запустите это при запуске приложения в своем классе Application:
Для более полного примера см. Http://github.com/perchrh/FontOverrideExample.
источник
code
шрифт, а затем устанавливаю <style name = "AppTheme" parent = "AppBaseTheme"> <item name = "android: typeface"> моноширинный </item> </style>,code
он работает, но не для жирного шрифта. я добавил этот код в класс, расширяющий Application. это правильное место? @ P-chanХотя я поддерживаю ответ Маниша как наиболее быстрый и целевой метод, я также видел наивные решения, которые просто рекурсивно перебирают иерархию представлений и по очереди обновляют гарнитуры всех элементов. Что-то вроде этого:
Вам нужно будет вызвать эту функцию в ваших представлениях как после раздувания макета, так и в
onContentChanged()
методах вашей Activity .источник
Мне удалось сделать это централизованно, вот результат:
У меня есть следующее,
Activity
и я расширяю его, если мне нужны нестандартные шрифты:Но если я использую действие из пакета поддержки, например,
FragmentActivity
я использую этоActivity
:Я еще не тестировал этот код с помощью
Fragment
s, но, надеюсь, он сработает.My
FontUtils
прост, что также решает проблему до ICS, упомянутую здесь https://code.google.com/p/android/issues/detail?id=9904 :источник
Привет, мне также нужны 2 разных шрифта в моем приложении для разных виджетов! Я использую такой способ:
В моем классе приложения я создаю статический метод:
Гарнитура String представляет xyz.ttf в папке с ресурсами. (я создал класс констант) Теперь вы можете использовать его везде в своем приложении:
Единственная проблема в том, что вам это нужно для каждого виджета, в котором вы хотите использовать шрифт! Но я считаю, что это лучший способ.
источник
Используя предложение pospi и работая со свойством 'tag', как это сделал Ричард , я создал настраиваемый класс, который загружает мои настраиваемые шрифты и применяет их к представлениям в соответствии с их тегами.
По сути, вместо установки TypeFace в атрибуте android: fontFamily вы используете атрибут android: tag и устанавливаете для него одно из определенных перечислений.
В своей деятельности или фрагменте вы просто вызываете
источник
Я нашел хорошее решение в блоге Лизы Рэй . С новой привязкой данных можно установить шрифт в ваших файлах XML.
В XML:
источник
Думаю, есть более удобный способ сделать это. Следующий класс установит пользовательский шрифт для всех компонентов вашего приложения (с настройкой для каждого класса).
источник
Реализации LayoutInflater по умолчанию не поддерживают указание гарнитуры шрифта из xml. Однако я видел, как это было сделано в xml, предоставив настраиваемую фабрику для LayoutInflater, которая будет анализировать такие атрибуты из тега xml.
Базовая структура хотела бы этого.
В этой статье дается более подробное объяснение этих механизмов и того, как автор пытается таким образом обеспечить поддержку макета xml для гарнитур. Код авторской реализации можно найти здесь .
источник
Установка пользовательского шрифта на обычный ProgressDialog / AlertDialog:
источник
Да, это возможно, если заменить шрифт по умолчанию. Я последовал этому решению, и оно сработало как шарм для всех текстов TextView и ActionBar с одним изменением.
styles.xml
Вместо themes.xml, упомянутого в приведенной выше ссылке, я упомянул шрифт по умолчанию, который нужно переопределить в моем файле styles.xml в теге темы приложения по умолчанию. По умолчанию можно перезаписывать шрифты с засечками, без, моноширинный и обычный.
TypefaceUtil.java
Первоначально я не знал, что гарнитуры, которые нужно перезаписать, являются фиксированными и имеют определенные значения, но в конечном итоге это помогло мне понять, как Android работает со шрифтами и гарнитурами и их значениями по умолчанию, что, конечно, совсем другое дело.
источник
Я не знаю, меняет ли это все приложение, но мне удалось изменить некоторые компоненты, которые иначе нельзя было бы изменить, сделав следующее:
источник
Мне нравится предложение Поспи. Почему бы не сделать все возможное, используя свойство 'tag' представления (которое вы можете указать в XML - 'android: tag'), чтобы указать любые дополнительные стили, которые вы не можете сделать в XML. Мне нравится JSON, поэтому я бы использовал строку JSON для указания набора ключей / значений. Этот класс делает всю работу - просто позвоните
Style.setContentView(this, [resource id])
в свою деятельность.Очевидно, вы захотите обработать больше, чем просто шрифт, чтобы использовать JSON.
Преимущество свойства 'tag' заключается в том, что вы можете установить его на основе базового стиля, который вы используете в качестве темы, и, таким образом, автоматически применить его ко всем вашим представлениям. РЕДАКТИРОВАТЬ: это приводит к сбою во время инфляции на Android 4.0.3. Вы по-прежнему можете использовать стиль и применять его к текстовым представлениям индивидуально.
В коде вы увидите одну вещь - у некоторых представлений есть тег, который не задан явно - как ни странно, это строка «ποκοπή», которая, согласно переводчику Google, «вырезана» по-гречески! Какого черта...?
источник
Ответ @ majinboo пересмотрен для управления производительностью и памятью. Любой более чем один шрифт, связанный с Activity, может использовать этот класс Font, указав сам конструктор в качестве параметра.
Пересмотренный класс шрифтов выглядит следующим образом:
источник
Работа для Xamarin.Android:
Класс:
Реализация приложения:
Стиль:
источник
Похоже, что использование пользовательских шрифтов стало проще с Android O, вы можете в основном использовать xml для этого. Я прикрепил ссылку на официальную документацию Android для справки, и, надеюсь, это поможет людям, которым все еще нужно это решение. Работа с пользовательскими шрифтами в Android
источник
Может быть полезно знать, что начиная с Android 8.0 (уровень API 26) вы можете использовать собственный шрифт в XML .
Проще говоря, сделать это можно следующим образом.
Поместите шрифт в папку
res/font
.Либо используйте его в атрибуте виджета
<Button android:fontFamily="@font/myfont"/>
или вставь это в
res/values/styles.xml
и использовать его как стиль
источник
Используйте атрибут fontPath непосредственно в XML-файле.
для использования в style.xml
<item name = "fontPath"> шрифты / ProximaNovaSemibold.ttf </item>
для использования в файле прямого макета
fontPath = "шрифты / ProximaNovaBold.ttf"
(Примечание: нет необходимости использовать атрибут app / android в префиксе)
источник
Совершенно возможно. Много способов сделать это. Самый быстрый способ - создать условие с помощью метода try - catch ... попробовать определенное условие стиля шрифта, отловить ошибку и определить другой стиль шрифта.
источник