Допустимые значения для Android:fontFamily и на что они отображаются?

В ответе на этот вопрос пользователь перечисляет значения для android:fontFamily и 12 вариантов (см. ниже). Откуда эти ценности? Документация для android:fontFamily не перечисляет эту информацию в любом месте (я проверял здесь, и здесь). Строки перечислены в файле Android 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) и удалить всю избыточность, которая присутствует в некоторых стилях, созданных до того, как я взглянул на файл.

3 ответа

Решение

Откуда эти ценности? Документация для 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>

Свет:

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

Светлый курсив:

<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>

Средний курсив:

<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>

Для краткости, вот как они все выглядят:

Доступные шрифты (по состоянию на Oreo)

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

На странице Типография дизайна материалов есть демонстрации некоторых из этих шрифтов и предложения по выбору шрифтов и стилей.

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


Используя эти шрифты

Установить android:fontFamily а также android:textStyle атрибуты, например

<!-- Roboto Bold -->
<TextView
    android:fontFamily="sans-serif"
    android:textStyle="bold" />

до желаемых значений из этой таблицы:

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 Medium  | sans-serif-condensed-medium |
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 является резервным шрифтом; вы не можете указать его напрямую)

Примечание: эта таблица получена из fonts.xml, Название и стиль каждого шрифта перечислены в файле fonts.xml, например

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

serif-monospace таким образом, семейство шрифтов, и normal это стиль.


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

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

  • Сэндвич с мороженым: обычный, жирный, курсив и полужирный курсив
  • Желейные бобы: светлый, светлый курсив, сжатый жирный шрифт, сжатый курсив и жирный курсив
  • Jelly Bean MR1: Roboto тонкий и тонкий курсив
  • Леденец:
    • Робото средний, средний курсив, черный и черный курсив
    • Noto Serif обычный, жирный, курсив, жирный курсив
    • Cutive Mono
    • Скоро будет
    • Танцевальный сценарий
    • Carrois Gothic SC
    • Ното Санс
  • Oreo MR1: Roboto конденсированная среда

Насколько я знаю, вы не можете объявить пользовательские шрифты в 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" />
Другие вопросы по тегам