Ресурс семейства шрифтов из темы, не примененный к TextViews - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу установить android:textAppearance из нескольких TextViews. Для этого я объявил следующий стиль:

<style name="TextAppearance.MyTheme.Headline1" parent="TextAppearance.MaterialComponents.Headline1">
    <item name="android:fontFamily">@font/montserrat</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textFontWeight">400</item>
    <item name="android:textSize">@dimen/text_size_215</item>
</style>

В моей теме для указанного стиля будет установлено значение attr из textAppearanceHeadline, например:

<item name="textAppearanceHeadline1">@style/TextAppearance.MyTheme.Headline1</item>

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

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

    <font
        app:fontStyle="normal"
        app:fontWeight="400"
        app:font="@font/montserrat_regular" />

    <font
        app:fontStyle="normal"
        app:fontWeight="500"
        app:font="@font/montserrat_medium" />

    <font
        app:fontStyle="normal"
        app:fontWeight="600"
        app:font="@font/montserrat_semibold" />
</font-family>

Все ссылки @font/montserrat_* - это .ttf файлы, которые я включил в свою папку ресурсов. Затем я установлю стиль, используя указанное attr значение, равное TextView Я хочу стилизовать так:

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Writing Words"
    android:textAppearance="?attr/textAppearanceHeadline1"
    app:layout_constraintEnd_toEndOf="@+id/headingView"
    app:layout_constraintStart_toStartOf="@+id/headingView"
    app:layout_constraintTop_toBottomOf="@+id/headingView" />

Проблема в том, что семейство шрифтов и font-weight применяются неправильно (они изменить семейство шрифтов по умолчанию и font-weight). Размер применяется правильно. Я что-то здесь не так сделал?

ОБНОВЛЕНИЕ

Когда я пытаюсь установить только android:textAppearance или style на TextView с ?attr/textAppearanceHeadline1, это не устанавливает семейство шрифтов и вес шрифта. Однако, когда я устанавливаю android:fontFamily и android:fontWeight вместе с android:textAppearance, это работает. Установка этих параметров вместе с style не работает. Почему это так? Что происходит?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Очевидно, я должен также переопределить fontFamily. Переопределение fontFamily в моем стиле делает его безупречным. Стиль становится следующим.

<style name="TextAppearance.MyTheme.Headline1" parent="TextAppearance.MaterialComponents.Headline1">
    <item name="fontFamily">@font/montserrat</item>
    <item name="android:fontFamily">@font/montserrat</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textFontWeight">400</item>
    <item name="android:textSize">@dimen/text_size_215</item>
</style>
0 голосов
/ 11 апреля 2020

Вероятно, в вашей xml существует viewGroup (где ваш TextView один из дочерних элементов) со стилем, который имеет android:fontFamily, который перекрывает ваши android:textAppearance

...