我想设置多个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" />
问题是,字体系列和字体粗细应用不正确(它们更改为默认字体系列和字体粗细)。尺寸已正确应用。我在这里做错了吗?
UPDATE
[当我尝试仅通过android:textAppearance
将style
或TextView
设置为?attr/textAppearanceHeadline1
时,它没有设置字体系列和字体粗细。但是,当我在android:fontFamily
旁边设置android:fontWeight
和android:textAppearance
时,它可以工作。在style
旁边设置那些无效。为什么呢?发生了什么事?
可能在您的xml中存在viewGroup(您的TextView是子级之一),其样式具有android:fontFamily
覆盖您的android:textAppearance
的样式>
显然,我也必须重写fontFamily
。以我的样式覆盖fontFamily
可以使其正常工作。因此样式如下。