Можно ли установить любой собственный шрифт в каждом элементе управления приложения? И не обязательно время выполнения? (т.е. из xml, если возможно, или только один раз для всего приложения в файле JAVA)
Я могу установить шрифт для одного элемента управления из этого кода.
public static void setFont(TextView textView) {
Typeface tf = Typeface.createFromAsset(textView.getContext()
.getAssets(), "fonts/BPreplay.otf");
textView.setTypeface(tf);
}
Проблема с этим кодом в том, что он должен вызываться для каждого элемента управления. И я хочу вызвать этот или любой аналогичный метод один раз или, если возможно, установить свойство в xml. Является ли это возможным?
android
fonts
textview
android-fonts
Прашам
источник
источник
VIEW
вместо того, чтобы писать acustom text view
и a поcustom button view
отдельности? Мое требование касается каждого элемента управления, и текстовое представление было просто примером. Извините, я забыл об этом упомянуть .. :-(Ответы:
РЕДАКТИРОВАТЬ : Итак, прошло некоторое время, и я хотел бы добавить то, что я считаю лучшим способом сделать это, и не менее, через XML!
Итак, сначала вам нужно создать новый класс, который переопределяет любой View, который вы хотите настроить. (например, хотите кнопку с настраиваемым шрифтом? Расширить
Button
). Приведем пример:Теперь, если у вас его нет, добавьте XML-документ
res/values/attrs.xml
и добавьте:Итак, разобравшись с этим, давайте вернемся к
parseAttributes()
методу, описанному ранее:Теперь все готово. Вы можете добавить больше атрибутов для чего угодно (вы можете добавить еще один для typefaceStyle - жирный, курсив и т. Д.), Но теперь давайте посмотрим, как его использовать:
xmlns:custom
Линия действительно может быть что угодно, но соглашение является то , что показано выше. Важно то, что он уникален, и поэтому используется имя пакета. Теперь вы просто используетеcustom:
префикс для своих атрибутов иandroid:
префикс для атрибутов Android.И последнее: если вы хотите использовать это в style (
res/values/styles.xml
), вам не следует добавлятьxmlns:custom
строку. Просто укажите имя атрибута без префикса:Использование собственного шрифта в Android
Это должно помочь. По сути, в XML нет способа сделать это, и, насколько я могу судить, нет более простого способа сделать это в коде. У вас всегда может быть метод setLayoutFont (), который создает шрифт один раз, а затем запускает setTypeface () для каждого. Вам просто нужно будет обновлять его каждый раз, когда вы добавляете новый элемент в макет. Что-то вроде ниже:
РЕДАКТИРОВАТЬ : Итак, я просто нашел время для реализации чего-то вроде этого сам, и как я в итоге это сделал, создал такую функцию, как эта:
Затем просто используйте этот метод из onCreate () и передайте все TextView, которые вы хотите обновить:
РЕДАКТИРОВАТЬ 9/5/12:
Итак, поскольку он все еще набирает просмотры и голоса, я хотел бы добавить гораздо лучший и более полный метод:
Если вы передадите ему корень вашего макета, он будет рекурсивно проверять
TextView
илиButton
представления (или любые другие, которые вы добавляете к этому оператору if) в этом макете и устанавливать шрифт без необходимости указывать их по идентификатору. Это, конечно, предполагает, что вы хотите установить шрифт для каждого представления.источник
recycle
TypedArray values
xmlns:custom="http://schemas.android.com/apk/res-auto"
Это довольно простой способ сделать через XML. Вам просто нужно создать свой собственный виджет, расширяющий TextView.
Сначала создайте файл в res / values / attrs.xml со следующим содержимым:
После этого создайте свой собственный виджет:
Как видите, приведенный выше код считывает шрифт внутри папки assets /. В этом примере я предполагаю, что в папке с ресурсами есть файл с именем «custom.ttf». Наконец, используйте виджет в XML:
Примечание: вы не сможете увидеть свой собственный шрифт в редакторе макетов Eclipse. Вот почему я поставил
isInEditMode()
чек. Но если вы запустите свое приложение, пользовательский шрифт будет работать как шарм.Надеюсь, поможет!
источник
TextView
класс; установилtypeface
в нем и использовал настраиваемый элемент управления в макете, как мы обычно это делаем, и это сработало для меня ... Однако это было просто, что указанное выше ...Пример TextView с гарнитурой roboto:
attr.xml
RobotoTextView.java:
Пример использования:
Ресурсы: шрифты Roboto и Noto
источник
Слишком поздно, но мне это помогает другим,
я создал CustomTextView, который имеет атрибут typeFace и заботится о проблеме утечки памяти с загрузкой шрифта без кеширования
Первый
Fonts
класс, который загружает шрифты из ресурсов только один разтогда вам нужно добавить настраиваемый атрибут в attrs.xml добавить это
затем настраиваемый класс
и, наконец, добавьте текстовое представление
и вы можете изменить шрифт программно с помощью метода setTypeFace
также вы можете переместить пользовательское пространство имен в свой родительский макет, если вы хотите использовать более одного из этого представления
Удачного кодирования :)
источник
Метод ниже, вызываемый в onCreate () и передающий вашу внешнюю ViewGroup, будет работать для всего, кроме текста, который создается динамически (например, динамические списки, предупреждения и т. Д.). Простой способ получить самую внешнюю ViewGroup - использовать getRootView в любом из ваших представлений.
Это должно работать и для динамического контента, вам просто нужно вызвать его, передав все, что вы создали, сразу после того, как вы его создали (хотя я это не тестировал).
Чтобы сэкономить память, вы, вероятно, захотите сделать шрифт статической переменной, а не создавать новый каждый раз, когда цикл выполняется, как я здесь.
источник
Если вы ищете более общее программное решение, я создал статический класс, который можно использовать для установки гарнитуры всего представления (Activity UI). Обратите внимание, что я работаю с Mono (C #), но вы можете легко реализовать его с помощью Java.
Вы можете передать этому классу макет или конкретное представление, которое хотите настроить. Если вы хотите быть суперэффективным, вы можете реализовать это с помощью шаблона Singleton.
В вашей деятельности вам нужно будет создать объект Typeface. Я создаю свой в OnCreate (), используя файл .ttf, расположенный в моем каталоге Resources / Assets /. Убедитесь, что файл помечен как актив Android в его свойствах.
источник
К сожалению, Android не предоставляет быстрый, простой и понятный способ изменения шрифта для всего приложения. Но недавно я изучил этот вопрос и создал несколько инструментов, которые позволяют вам изменять шрифт без какого-либо кодирования (вы можете сделать все это через xml, стили и даже внешний вид текста). Они основаны на аналогичных решениях, как вы видите в других ответах здесь, но допускают гораздо большую гибкость. Вы можете прочитать все об этом в этом блоге и посмотреть проект на github здесь .
Вот пример того, как применять эти инструменты. Поместите все свои файлы шрифтов в
assets/fonts/
. Затем объявите эти шрифты в XML-файле (напримерres/xml/fonts.xml
) и загрузите этот файл в начале своего приложения с помощьюTypefaceManager.initialize(this, R.xml.fonts);
(например, в onCreate вашего класса Application). Файл xml выглядит так:Теперь вы можете использовать эти шрифты в своем стиле или в xml (при условии, что вы используете инструменты, о которых я упоминал выше), используя настраиваемый элемент пользовательского интерфейса
com.innovattic.font.FontTextView
в макете xml. Ниже вы можете увидеть, как можно применить шрифт ко всем текстам во всем приложении, просто отредактировавres/values/styles.xml
:С сопровождающими
res/layout/layout.xml
:Не забудьте применить тему в манифесте Android.
источник
Хочу добавить заметку к отличному решению
leocadiotine
. Это прекрасно, но при использовании этого Custom TextView много раз замедляет работу приложения, поскольку ему приходится обращаться к ресурсам каждый раз, когда создается текстовое представление. Я предлагаю использовать что - то вродеView Holder pattern
вAdapters
, я написал пример:Таким образом, приложение получает доступ к ресурсам только один раз для каждого ресурса и сохраняет их в памяти для дальнейших нужд.
источник
Я не знаю, меняет ли это все приложение, но мне удалось изменить некоторые компоненты, которые иначе нельзя было бы изменить, сделав следующее:
источник
По этой ссылке я нашел пошаговую информацию, ссылка: https://github.com/jaydipumaretiya/CustomTypeface/
Есть много способов правильно использовать гарнитуру в Android, вы должны поместить файл гарнитуры в папку с активами непосредственно под вашим основным шрифтом и можете использовать его во время выполнения.
Другой самый простой способ - использовать библиотеку по умолчанию для установки шрифта в вашем XML-файле. Я предпочитаю эту настраиваемую библиотеку шрифтов для установки шрифта на TextView, EditText, Button, CheckBox, RadioButton и AutoCompleteTextView и другие элементы в android.
источник
В Android 8.0 (уровень API 26) представлена новая функция - «Шрифты в XML». Вы можете создать файл fontfamily и установить его в styles.xml.
Источник: Шрифты в XML
источник