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

266

В ответе на этот вопрос пользователь перечисляет значения 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) и удалить всю избыточность, которая присутствует в некоторых стилях, созданных до того, как я взглянул на файл.

Кристофер Перри
источник

Ответы:

346

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

Thin :

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

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

Ahmad
источник
2
Ха-ха: Я действительно знал о сайте до этого, поэтому найти его было несложно. Но для дальнейшего использования: я предпочитаю использовать поиск на developer.android.com вместо поиска в Google, поскольку вы можете ограничить поиск только API, сообщениями в блогах, заметками о выпуске и т. Д.
Ахмад
8
И если вы заинтересованы: это где шрифты определены. Этот класс загружает шрифты, и этот управляет ими.
Ахмад
1
@androiddeveloper сделано. Roboto black не относится к цвету шрифта, но является просто «более смелой» версией Roboto Bold. Я добавил эталонное изображение в нижней части.
Ахмад
1
@ Ахмад Спасибо за разъяснение этого. Вот ваш +1 ... :)
Android-разработчик
2
также есть много псевдонимов, которые можно использовать с fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
Pauland
110

Доступные шрифты (по состоянию на 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 конденсированная среда
Newtonx
источник
1
как вы нашли в журнале про версию Android?
Android-разработчик
3
@androiddeveloper Я смотрел на даты, когда каждая строка была добавлена. Чтобы точно знать, какие шрифты доступны в конкретной версии, посмотрите system_fonts.xml для этой версии, например, для Lollipop: android.googlesource.com/platform/frameworks/base/+/…
Newtonx
Моя единственная претензия к этому - это не алфавит: p Но все же! Это должен быть лучший ответ! Спасибо!
Т. Вуди
9

Насколько я знаю, вы не можете объявить пользовательские шрифты в XML или темах. Я обычно просто делаю пользовательские классы, расширяющие текстовое представление, которые устанавливают свой собственный шрифт при создании экземпляра, и использую их в моих 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" />
trippedout
источник
1
Это может стоить вам много памяти в обзоре переработчика
Florescu Cătălin