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


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



Answers


Откуда берутся эти ценности? Документация для 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: свет Roboto, светло-курсив, конденсированный, конденсированный жирный, конденсированный курсив и конденсированный жирный курсив
  • Jelly Bean MR1: Roboto тонкий и тонкий курсив
  • Леденец:
    • Робото средняя, ​​средняя курсив, черный и черный курсив
    • Noto Serif регулярный, полужирный, курсив, жирный курсив
    • Режущий моно
    • Скоро
    • Танцевальный скрипт
    • 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" />