主题中的字体系列资源不适用于 TextView
Font family resource from theme not applied to TextViews
我想设置几个TextViews
的android:textAppearance
。为此,我声明了以下样式:
<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>
在我的主题中,所述样式将设置为 textAppearanceHeadline
的 attr
,如下所示:
<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" />
问题是,字体系列和字体粗细应用不正确(它们更改为默认字体系列和字体粗细)。大小已正确应用。我是不是做错了什么?
更新
当我尝试仅将 android:textAppearance
或 style
设置为 TextView
和 ?attr/textAppearanceHeadline1
时,它不会设置字体系列和字体粗细。但是,当我将 android:fontFamily
和 android:fontWeight
与 android:textAppearance
一起设置时,它会起作用。将它们设置在 style
旁边是行不通的。为什么呢?发生什么事了?
可能在您的 xml 中存在 viewGroup(其中您的 TextView 的子视图之一)具有 android:fontFamily
覆盖您的 android:textAppearance
的样式
显然,我还必须覆盖 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>
我想设置几个TextViews
的android:textAppearance
。为此,我声明了以下样式:
<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>
在我的主题中,所述样式将设置为 textAppearanceHeadline
的 attr
,如下所示:
<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" />
问题是,字体系列和字体粗细应用不正确(它们更改为默认字体系列和字体粗细)。大小已正确应用。我是不是做错了什么?
更新
当我尝试仅将 android:textAppearance
或 style
设置为 TextView
和 ?attr/textAppearanceHeadline1
时,它不会设置字体系列和字体粗细。但是,当我将 android:fontFamily
和 android:fontWeight
与 android:textAppearance
一起设置时,它会起作用。将它们设置在 style
旁边是行不通的。为什么呢?发生什么事了?
可能在您的 xml 中存在 viewGroup(其中您的 TextView 的子视图之一)具有 android:fontFamily
覆盖您的 android:textAppearance
显然,我还必须覆盖 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>