Мне нужно использовать определенный шрифт для всего моего приложения. У меня есть файл .ttf для того же. Можно ли установить его в качестве шрифта по умолчанию при запуске приложения, а затем использовать его в другом месте приложения? Когда установлено, как я могу использовать его в моем XML макета?
java
android
android-fonts
Samuh
источник
источник
Ответы:
Да с отражением. Это работает ( основываясь на этом ответе ):
(Примечание: это обходной путь из-за отсутствия поддержки пользовательских шрифтов, поэтому, если вы хотите изменить эту ситуацию, пожалуйста, отметьте звездочку, чтобы проголосовать за проблему Android ). Примечание: не оставляйте комментарии «Я тоже» по этому вопросу, каждый, кто его посмотрел, получит электронное письмо, когда вы это сделаете. Так что просто "звезда", пожалуйста.
Затем вам нужно перегрузить несколько шрифтов по умолчанию, например, в классе приложения :
Или, конечно, если вы используете один и тот же файл шрифта, вы можете улучшить его, чтобы загрузить его только один раз.
Тем не менее, я склонен просто переопределить один, скажем
"MONOSPACE"
, затем настроить стиль, чтобы заставить это приложение шрифта шрифта широко:API 21 Android 5.0
Я исследовал сообщения в комментариях, что это не работает, и это кажется несовместимым с темой
android:Theme.Material.Light
.Если эта тема не важна для вас, используйте старую тему, например:
источник
"DEFAULT_BOLD"
также частное поле:private static Typeface[] sDefaults;
вы можете попробовать получить к нему доступ путем отражения и настройкиsDefaults[Typeface.ITALIC]
yourTypeface. Смотрите это.TextView
везде менять настройки по умолчанию, чтобы использовать пользовательские шрифты или использовать решение на основе отражений, подобное этому. В сочетании с ограниченным набором шрифтов, доступных в Android, это делает разработку хорошо выглядящих приложений сложной задачей. Я добавил запрос на функцию отслеживания ошибок Android. Если вы хотите увидеть эту функцию, вы можете отметитьВ Android есть отличная библиотека для пользовательских шрифтов: Каллиграфия
Вот пример, как его использовать.
в Gradle вам нужно поместить эту строку в файл build.gradle вашего приложения:
а затем создайте класс, который расширяет
Application
и напишите этот код:и в классе действия поместите этот метод перед onCreate:
и последнее, что ваш файл манифеста должен выглядеть следующим образом:
и это изменит всю активность на ваш шрифт! это просто и чисто!
источник
<b></b>
,<u></u>
и<i></i>
вstrings.xml
файле и до сих пор работает.Хотя это не будет работать для всего приложения, оно будет работать для любого действия и может быть повторно использовано для любого другого действия. Я обновил свой код благодаря @ FR073N для поддержки других видов. Я не уверен , о проблемах с
Buttons
,RadioGroups
и т.д. , потому что эти классы все простиратьсяTextView
так что они должны работать нормально. Я добавил булево условие для использования отражения, потому что оно кажется очень хакерским и может заметно снизить производительность.Примечание: как указано, это не будет работать для динамического контента! Для этого можно вызвать этот метод, скажем, методом
onCreateView
илиgetView
, но это требует дополнительных усилий.Затем, чтобы использовать его, вы должны сделать что-то вроде этого:
Надеюсь, это поможет.
источник
В итоге:
Вариант № 1: Используйте отражение, чтобы применить шрифт (объединяя ответ Уэстона и Роджера Хуанга ):
Использование в классе приложения:
установить стиль, чтобы заставить это приложение шрифта шрифта широко (на основе lovefish ):
Pre-леденец:
Леденец (API 21):
Вариант 2. Подкласс каждого вида, где вам нужно настроить шрифт, т.е. ListView, EditTextView, Button и т. Д. ( Ответ Палани ):
Вариант 3. Реализуйте View Crawler, который просматривает иерархию представлений вашего текущего экрана:
Вариант № 1 ( ответ Тома ):
Использование :
Вариант № 2: https://coderwall.com/p/qxxmaa/android-use-a-custom-font-everywhere .
Вариант № 4: Используйте сторонний Lib под названием Каллиграфия .
Лично я бы порекомендовал вариант № 4, так как он избавляет от многих головных болей.
источник
"sans-serif"
вnewMap.put(
иmonospace
вstyles
?! Я хочу использовать собственный шрифт с именемbarana.ttf
.Я хотел бы улучшить ответ Вестона для API 21 Android 5.0.
причина
В соответствии с API 21 большинство стилей текста включают параметр fontFamily, например:
Который применяет стандартный шрифт Roboto Regular:
Исходный ответ не может применить моноширинный шрифт, потому что android: fontFamily имеет больший приоритет по сравнению с атрибутом android: typeface ( ссылка ). Использование Theme.Holo. * - допустимый обходной путь, потому что внутри нет настроек android: fontFamily.
Решение
Поскольку Android 5.0 помещает системную гарнитуру в статическую переменную Typeface.sSystemFontMap ( reference ), мы можем использовать ту же технику отражения для ее замены:
источник
Button
названий и панелей инструментов. Я переопределение шрифта по умолчанию в MainApplication следующим образом :FontsOverride.setDefaultFont(this, "DEFAULT", "MyFontAsset.ttf");
. Я использую Nexus 5, v5.1.1Build.VERSION.SDK_INT == 21
- Это как раз вAPI 21
I тесте на Nexus с API 22это очень просто ... 1. Загрузите и поместите свой собственный шрифт в активы. Затем напишите один отдельный класс для представления текста следующим образом: здесь я использовал шрифт futura.
}
и сделайте следующее в xml:
источник
Я также предложил бы расширить TextView и другие элементы управления, но было бы лучше рассмотреть возможность установки шрифта в конструкциях.
источник
Я хотел бы улучшить ответы Уэстона и Роджера Хуанга для Android 21 над леденцом на палочке с темой " Theme.AppCompat “.
Ниже Android 4.4
Более (равный) API 5.0
И файл утилиты FontsOverride такой же, как в Weston ответ «s. Я проверил в этих телефонах:
Nexus 5 (Android 5.1 Основная система Android)
ZTE V5 (Android 5.1 CM12.1)
Примечание XIAOMI (Android 4.4 MIUI6)
HUAWEI C8850 (Android 2.3.5 НЕИЗВЕСТНО)
источник
Отличное решение можно найти здесь: https://coderwall.com/p/qxxmaa/android-use-a-custom-font-everywhere .
Просто расширьте действия из BaseActivity и напишите эти методы. Также вы должны лучше кэшировать шрифты, как описано здесь: https://stackoverflow.com/a/16902532/2914140 .
После некоторых исследований я написал код, который работает на Samsung Galaxy Tab A (Android 5.0). Использовали код Уэстона и Роджера Хуанга, а также https://stackoverflow.com/a/33236102/2914140 . Также протестирован на Lenovo TAB 2 A10-70L, где он не работает. Я вставил здесь шрифт Comic Sans, чтобы увидеть разницу.
Чтобы запустить код во всем приложении, вы должны написать в некотором классе, таком как Application, следующее:
Создайте папку «шрифты» внутри «ресурсов» и поместите туда нужные шрифты. Простая инструкция может быть найдена здесь: https://stackoverflow.com/a/31697103/2914140 .
Устройство Lenovo также неправильно получает значение гарнитуры. В большинстве случаев он возвращает Typeface.NORMAL, иногда ноль. Даже если TextView выделен жирным шрифтом (в макете XML-файла). Смотрите здесь: TextView isBold всегда возвращает NORMAL . Таким образом, текст на экране всегда написан обычным шрифтом, а не жирным шрифтом или курсивом. Так что я думаю, что это ошибка производителя.
источник
Работаем на Xamarin.Android:
Класс:
Реализация приложения:
Стиль:
источник
Что касается Android O, теперь это можно определить непосредственно из XML, и моя ошибка теперь закрыта!
Смотрите здесь для деталей
TL; DR:
Сначала вы должны добавить свои шрифты в проект
Во-вторых, вы добавляете семейство шрифтов, например так:
Наконец, вы можете использовать шрифт в макете или стиле:
Наслаждайтесь!
источник
Вы можете установить пользовательские шрифты для каждого макета один за другим, с помощью всего одного вызова функции из каждого макета, передавая его корневой View.First, создать единый подход для доступа к объекту шрифта, как этот
Вы можете определить различные шрифты в вышеприведенном классе. Теперь определите класс Helper для шрифтов, который будет применять шрифты:
В приведенном выше коде я применяю шрифты только к textView и EditText, вы также можете применять шрифты к другим элементам представления аналогично. Вам просто нужно передать идентификатор вашей корневой группы представления вышеописанному методу применения шрифта. например, ваш макет:
В вышеприведенном макете идентификатор родительского элемента «Основной родитель» теперь позволяет применять шрифт
Ура :)
источник
Я бы предложил расширить TextView и всегда использовать ваш собственный TextView в макетах XML или там, где вам нужен TextView. В вашем пользовательском TextView переопределите
setTypeface
источник
Решение Тома прекрасно работает, но работает только с TextView и EditText.
Если вы хотите охватить большинство представлений (RadioGroup, TextView, Checkbox ...), я создал метод, который делает это:
Этот метод возвращает стиль представления, заданный в XML (полужирный, курсив ...), и применяет их, если они существуют.
Для ListView я всегда создаю адаптер и устанавливаю шрифт внутри getView.
источник
Я написал класс, назначающий гарнитуру для представлений в текущей иерархии представлений и основываясь на текущих свойствах гарнитуры (жирный, обычный, вы можете добавить другие стили, если хотите):
Теперь во всех фрагментах в onViewCreated или onCreateView, во всех действиях в onCreate и во всех адаптерах представления в getView или newView просто вызовите:
источник
в API 26 с build.gradle 3.0.0 и выше вы можете создать каталог шрифтов в Res и использовать эту строку в своем стиле
для изменения build.gradle используйте это в ваших зависимостях build.gradle
источник
item
одно это не устанавливает шрифт для всего приложения. какая-нибудь подсказка?Наконец, Google осознал серьезность этой проблемы (применяя пользовательский шрифт к компонентам пользовательского интерфейса), и они разработали чистое решение для этой проблемы.
Сначала вам нужно выполнить обновление для поддержки библиотеки 26+ (вам также может понадобиться обновить ваш gradle {4.0+}, android studio), затем вы можете создать новую папку ресурсов с именем font. В эту папку вы можете поместить ресурсы шрифта (.tff, ...). Затем вам нужно переопределить приложение по умолчанию их и заставить свой собственный шрифт в него :)
Примечание: если вы хотите поддерживать устройства с более старым API, чем 16, вы должны использовать пространство имен приложения вместо Android!
источник
Я также хотел бы улучшить ответ Вестона для API 21 Android 5.0.
У меня была такая же проблема на моем Samsung s5, когда я использовал шрифт DEFAULT. (с другими шрифтами он работает нормально)
Мне удалось заставить его работать, установив гарнитуру (например, "sans") в файлах XML для каждого Textview или кнопки
и в классе MyApplication:
Надеюсь, поможет.
источник
Это решение не работает правильно в некоторых ситуациях.
Итак, я расширяю это:
FontsReplacer.java
https://gist.github.com/orwir/6df839e3527647adc2d56bfadfaad805
источник
каллиграфия работает довольно хорошо, но она мне не подходит, поскольку она не поддерживает разные веса (полужирный, курсив и т. Д.) Для семейства шрифтов.
Поэтому я попробовал Fontain , который позволяет вам определять собственные представления и применять их к семействам пользовательских шрифтов.
чтобы использовать Fontain, вы должны добавить в свой модуль приложения build.gradle следующее:
Затем вместо обычного TextView следует использовать FontTextView.
Пример FontTextView с заглавными и жирными буквами:
источник
источник
TextView
sЧтобы изменить семейство шрифтов по умолчанию для TextViews, переопределите textViewStyle в теме вашего приложения.
Для использования собственного шрифта в fontFamily используйте ресурсы шрифтов, которые есть в библиотеке поддержки.
Функция была добавлена в Android 26, но перенесена в более старые версии через supportlib.
https://developer.android.com/guide/topics/resources/font-resource.html https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html # с использованием-поддержка Пб
источник
С момента выпуска Android Oreo и его библиотеки поддержки (26.0.0) вы можете легко это сделать. Обратитесь к этому ответу в другом вопросе.
В основном ваш окончательный стиль будет выглядеть так:
источник
Я нашел смесь библиотеки каллиграфии 3 и поста Coderwall как мой конечный результат.
источник
Да, можно установить шрифт для всего приложения.
Самый простой способ сделать это - упаковать нужный шрифт (ы) в ваше приложение.
Для этого просто создайте активы / папку в корне проекта и поместите ваши шрифты (в форме TrueType или TTF) в ресурсы.
Вы можете, например, создать assets / fonts / и поместить туда свои файлы TTF.
источник