Как указать, например. Roboto-Medium или Roboto-Black в styles.xml

Сообщения вроде этого Как изменить fontFamily TextView в Android предлагают , что варианты шрифтов Roboto, которые вы можете указать в файле styles.xml в Android 4.2, сводятся к следующему:

  • Обычный
  • Курсив
  • Смелый
  • Жирный курсив
  • Светлый
  • Светлый курсив
  • Тонкий
  • Тонкий курсив
  • Сжатый обычный
  • Сжатый курсив
  • Сжатый полужирный
  • Сжатый полужирный курсив

Это исключает возможность стилизации TextViews, например. шрифты Roboto-Medium или Roboto-Black.

Но зачем Google добавлять общесистемные шрифты, которые нельзя использовать для стилизации ваших TextView? Конечно, должен быть какой-то способ указать все шрифты Roboto из styles.xml (т.е. НЕ нужно встраивать шрифты как активы и создавать пользовательские TextViews в коде), но как?


person ckibsen    schedule 09.01.2014    source источник
comment
насколько я знаю, вам нужно написать собственную TextView или использовать библиотеку fonts.   -  person Nitin Misra    schedule 09.01.2014


Ответы (4)


В Android 5.0 вы можете установить Roboto Medium с помощью sans-serif-medium.

Это решение, взятое из Google iosched 2014, использует sans-serif на Android до версии 21:

значения /styles.xml

<style name="MyStyle">
    <item name="android:fontFamily">@string/font_fontFamily_medium</item>
</style>

значения /fonts.xml

<string name="font_fontFamily_medium">sans-serif</string>

значения-v21/fonts.xml

<string name="font_fontFamily_medium">sans-serif-medium</string>
person rciovati    schedule 24.10.2014
comment
И не забывайте font_textStyle_medium - person Martynas Jurkus; 10.12.2014
comment
Просто на всякий случай вам нужно будет добавить <!--suppress AndroidDomInspection -->, чтобы Android Studio не выдавала вам предупреждение об использовании целого числа, а не одного из флагов, доступных для textStyle. - person CodyEngel; 19.09.2016

НОВОЕ РЕШЕНИЕ

После Google I/O '17 вы можно создать несколько семейств шрифтов в папке res/font

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
    app:font="@font/roboto_light"
    app:fontStyle="normal"
    app:fontWeight="300" />
<font
    app:font="@font/roboto_bold"
    app:fontStyle="normal"
    app:fontWeight="700" />

</font-family>

и можно использовать где угодно

 <style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
    <item name="android:textColor">@color/colorBlack</item>
    <item name="android:fontFamily">@font/font_family_roboto</item>
</style>

папка со шрифтами семейство шрифтов

СТАРЫЙ ОТВЕТ

Спасибо за Якоба Эрикссона

исходный ответ

android:fontFamily="sans-serif"           // roboto regular
android:fontFamily="sans-serif-light"     // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed
android:fontFamily="sans-serif-black"     // roboto black
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

стильно:

<style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_view_text_size</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:fontFamily">sans-serif-light</item>
    <item name="android:textStyle">normal</item>
</style>

в теме приложения:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/gray</item>
    <item name="android:textViewStyle">@style/AppTheme.DefaultTextView</item>
</style>
person Abror Esonaliev    schedule 21.03.2017
comment
Я получаю сообщение об ошибке: Элемент font-family должен быть объявлен - person Someone Somewhere; 24.04.2019

Я предлагаю вам использовать собственные библиотеки, такие как Android-RobotoTextView или Каллиграфия. С помощью одного из них вы можете установить шрифт представления в xml с атрибутом, чтобы вы могли вставить его в styles.xml . И они работают с более ранней версией Android, чем 4.0.

person Rampo    schedule 18.08.2014

Библиотека поддержки 26 представила использование шрифтов в XML. и обратно совместим с Android API 14.

Чтобы добавить шрифты в качестве ресурсов, выполните следующие действия в Android Studio:

  1. Щелкните правой кнопкой мыши папку res и выберите «Создать» > «Каталог ресурсов Android». Появится окно Новый каталог ресурсов.

  2. В списке Тип ресурса выберите шрифт и нажмите кнопку ОК. Примечание. Имя каталога ресурсов должно быть шрифтом.

Рисунок 1. Добавление каталога ресурсов шрифта

  1. Добавьте файлы шрифтов в папку шрифтов. Приведенная ниже структура папок создает R.font.dancing_script, R.font.lobster и R.font.typo_graphica.

Рисунок 2. Добавление файлов шрифтов в каталог ресурсов

  1. Дважды щелкните файл шрифта, чтобы просмотреть шрифты файла в редакторе.

Рисунок 3. Предварительный просмотр файла шрифта

Чтобы установить шрифт для TextView, в XML-файле макета задайте для атрибута fontFamily файл шрифта, к которому вы хотите получить доступ.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/lobster"/>

Предварительный просмотр макета Android Studio позволяет предварительно просмотреть шрифт, установленный в TextView.

Рис. 4. Предварительный просмотр шрифтов в режиме предварительного просмотра макета

Чтобы добавить шрифт в стиль, откройте файл styles.xml и задайте для атрибута fontFamily файл шрифта, к которому вы хотите получить доступ.

<style name="customfontstyle" parent="@android:style/TextAppearance.Small">
<item name="android:fontFamily">@font/lobster</item>

If you don't want to bundle the fonts in your app, you can always look into Downloadable Fonts

person Andrew Orobator    schedule 14.12.2017
comment
Это полезно, но ОП спрашивал об использовании системных шрифтов, таких как Roboto-Medium и т. Д. Конечно, вам не нужно связывать файлы TTF с вашим приложением или загружать их, когда шрифт уже поставляется с системой? - person LarsH; 25.02.2021
comment
и вот я тоже борюсь с этим спустя 7 лет после первоначального поста... - person jteichert; 14.06.2021