Material TextAppearance 对处理不同的 textSize 有用吗

Is Material TextAppearance usefull for handle different textSize

我刚发现 textAppearence 关键字和 TextAppearance.MaterialComponents

使用示例:

<TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:fontFamily="@font/proxima_nova_soft_bold"
     android:text="@string/ads_header_last"
     android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5"
     android:textColor="@color/charcoal_grey" />

如果我们看起来像 TextAppearance.MaterialComponents.Headline5,我们就找到了这个

<style name="TextAppearance.MaterialComponents.Headline5" parent="TextAppearance.AppCompat.Headline">
<item name="fontFamily">sans-serif</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item>
<item name="android:textAllCaps">false</item>
<item name="android:textSize">24sp</item>
<item name="android:letterSpacing">0</item>

里面的 textSize 是 24sp 我很困惑,因为我认为 textAppearence 关键字可以管理所有屏幕设备的 textSize

如果我们使用

android:textAppearance="@android:style/TextAppearance.Material.Headline"

TextAppearance.Material.Headline 样式是

<style name="TextAppearance.Material.Headline">
    <item name="textSize">@dimen/text_size_headline_material</item>
    <item name="fontFamily">@string/font_family_headline_material</item>
    <item name="textColor">?attr/textColorPrimary</item>
</style>

并且 @dimen/text_size_headline_material 正确地针对不同的屏幕尺寸使用不同的尺寸

<dimen name="text_size_headline_material">24sp</dimen>
<dimen name="text_size_headline_material">18sp</dimen>
etc...

为什么TextAppearance.MaterialComponents.Headline5 的配置不一样? 我不能使用 android:textAppearance="@android:style/TextAppearance.Material.Headline" 因为它需要 API 21

我是不是漏掉了什么?

TextAppearance.MaterialComponents.Headline5<h5> 标签,所以它在样式中有固定的文本大小,这就是为什么如果你要使用这种样式你不能改变文本大小,这是 header标签

这对所有类型的设备都是一样的

要改变风格

用 header parent 制作你自己的 style 并在你的 TextView

中使用它
<style name="TvStyle" parent="TextAppearance.MaterialComponents.Headline5">
     <item name="android:textSize">16sp</item>
</style>