Допустимые значения для android: fontFamily и на что они направлены?

В ответе этот вопрос пользователь перечисляет значения для android:fontFamily и 12 вариантов (см. ниже). Откуда берутся эти ценности? Документация для android:fontFamily не перечисляет эту информацию ни в каком месте (я проверил здесь и здесь). Строки перечислены в файле styles.xml в разных местах, но как они вернутся к шрифту Roboto?

От android 4.1/4.2 следующие семейства шрифтов Roboto доступны:

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

в сочетании с этим

android:textStyle="normal|bold|italic" 

Возможны 12 вариантов:

  • Обычный
  • Курсив
  • Полужирный
  • Полужирный-курсив
  • Свет
  • Светодиодный
  • Тонкий
  • Тонкого наклонный
  • Конденсированный регулярный
  • Сжатый курсив
  • Сжатый жирный
  • Сжатый полужирный

В файле styles.xml в приложении я работаю над кем-то, указав это как семейство шрифтов, и я уверен, что это неправильно:

<item name="android:fontFamily">Roboto-Regular.ttf</item>

Я хочу, чтобы тема для нашего приложения настроена правильно (которая включает в себя правильное использование fontFamily) и удаляет всю избыточность, которая находится в некоторых стилях, которые были созданы до того, как я просмотрел файл.

Ответ 1

Откуда берутся эти значения? Документация для android: fontFamily не перечисляет эту информацию в любом месте

Они действительно не указаны в документации. Но они упоминаются здесь в разделе "Семейство шрифтов". В документе перечислены все новые общедоступные API для Android Jelly Bean 4.1.

В файле styles.xml в приложении, над которым я работаю, кто-то перечислил это как семейство шрифтов, и я уверен, что это неправильно:

Да, это неправильно. Вы не ссылаетесь на файл шрифта, вы должны использовать имя шрифта, указанное в связанном документе выше. В этом случае это должно быть следующее:

<item name="android:fontFamily">sans-serif</item>

Как уже упоминалось связанный ответ, возможны 12 вариантов:

Добавлено в Android Jelly Bean (4.1) - API 16:

Обычный (по умолчанию):

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item> 

Курсив:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">italic</item>

Жирный

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>

Жирный курсив:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>

Light

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>

Light-наклонный

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">italic</item>

Тонкий:

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">normal</item>

Тонкий курсив:

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>

Конденсированный регулярный:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>

Сжатый курсив:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>

Сжатый жирный:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>

Сжатый полужирный:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>

Добавлено в Android Lollipop (v5.0) - API 21:

Средние

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>

Medium-наклонным

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">italic</item>

Черный

<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textStyle">italic</item>

Для быстрой справки они выглядят так:

Ответ 2

Доступные шрифты (от Nougat)

Предварительный просмотр всех шрифтов

Подробнее об этих шрифтах можно узнать в http://developer.android.com/design/style/typography.html.

fonts.xml - это окончательный и постоянно расширяющийся список шрифтов Android.


Использование этих шрифтов

Чтобы использовать один из этих шрифтов, посмотрите fonts.xml и найдите фамилию шрифта. Например, для использования Cutive Mono соответствующий фрагмент из файла fonts.xml

<family name="serif-monospace">
    <font weight="400" style="normal">CutiveMono.ttf</font>
</family>

serif-monospace является, таким образом, фамилией. Укажите это имя в TextView или стиле, например

<TextView
    android:fontFamily="serif-monospace"
    android:textStyle="italic" />

Или просто используйте эту таблицу:

Font                     | android:fontFamily         | android:textStyle
-------------------------|----------------------------|-------------------
Roboto Thin              | sans-serif-thin            |
Roboto Light             | sans-serif-light           |
Roboto Regular           | sans-serif                 |
Roboto Bold              | sans-serif                 | bold
Roboto Medium            | sans-serif-medium          |
Roboto Black             | sans-serif-black           |
Roboto Condensed Light   | sans-serif-condensed-light |
Roboto Condensed Regular | sans-serif-condensed       |
Roboto Condensed Bold    | sans-serif-condensed       | bold
Noto Serif               | serif                      |
Noto Serif Bold          | serif                      | bold
Droid Sans Mono          | monospace                  |
Cutive Mono              | serif-monospace            |
Coming Soon              | casual                     |
Dancing Script           | cursive                    |
Dancing Script Bold      | cursive                    | bold
Carrois Gothic SC        | sans-serif-smallcaps       |

(Noto Sans - резервный шрифт, вы не можете указать его напрямую)


Совместимость

На основе log файла fonts.xml и предыдущего system_fonts.xml, вы можете увидеть, когда был добавлен каждый шрифт:

  • Сэндвич с мороженым: Roboto Regular, жирный, курсив и полужирный курсив.
  • Желе Bean: Робото-свет, светло-курсив, конденсированный, конденсированный жирный, конденсированный курсив и конденсированный полужирный курсив
  • Желе Bean MR1: Roboto тонкий и тонкий курсив
  • Lollipop:
    • Робото-среда, средне-курсивная, черная и черная курсивная
    • Noto Serif регулярный, полужирный, курсив, жирный курсив
    • Cutive Mono
    • Скоро
    • Танцы Script
    • Carrois Gothic SC
    • Noto Sans

Ответ 3

Насколько я знаю, вы не можете объявлять пользовательские шрифты в xml или темах. Обычно я просто создаю пользовательские классы, расширяющие textview, которые устанавливают свой собственный шрифт при создании экземпляра и используют их в моих XML файлах макета.

т

public class Museo500TextView extends TextView {
    public Museo500TextView(Context context, AttributeSet attrs) {
        super(context, attrs);      
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "path/to/font.ttf"));
    }
}

и

<my.package.views.Museo900TextView
        android:id="@+id/dialog_error_text_header"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="12sp" />