android:lineSpacingMultiplier 不适用于 android:textAppearance

android:lineSpacingMultiplier doesn't work in android:textAppearance

我试图在我的 textAppearance 样式 (android:textAppearance) 中添加 android:lineSpacingMultiplier,但它不起作用。我做错了什么吗?

文本外观样式:

<style name="TextAppearance.Body1" parent="TextAppearance.AppCompat.Body1">
      <item name="android:lineSpacingMultiplier">1.25</item>
</style> 

样式使用:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="This is body 1\nThis is body 1"
    android:textAppearance="TextAppearance.Body1"
    />

出于某种原因,android:lineSpacingMultiplier 无法作为您的 textAppearance 中的项目使用。您要么必须将其直接设置为 TextView 属性(使用 android:lineSpacingMultiplier),要么创建一个 "wraps" 设置 textAppearancelineSpacingMultiplier 的常规样式

创建样式

<style name="TextBody1">
    <item name="android:textAppearance">@style/TextAppearance.AppCompat.Body1</item>
    <item name="android:lineSpacingMultiplier">1.25</item>
</style>

<style name="TextBody1" parent="TextAppearance.AppCompat.Body1">
    <item name="android:lineSpacingMultiplier">1.25</item>
</style>

然后通过 style 而不是 android:textAppearance

申请
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="This is body 1\nThis is body 1"
    style="@style/TextBody1"
    />

我能够通过简单地将 style 应用于 TextView 本身而不是 textAppearance 来解决问题(类似于接受的答案,但代码少了一点).

这是一个示例:

风格:

<style name="TextBody1" parent="TextAppearance.AppCompat.Body1">
  <item name="android:lineSpacingMultiplier">1.25</item>
</style> 

或者如果你不关心 parent 更简单:

<style name="TextBody1">
      <item name="android:lineSpacingMultiplier">1.25</item>
</style> 

然后在您的视图中:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="This is body 1\nThis is body 1"
    style="@style/TextBody1"
    />

我不确定为什么将 android:textAppearance 应用到具有定义 android:lineSpacingMultiplier 的给定 styleTextView 不起作用(我推测这可能是由于事实上,行间距在样式 View 本身而不是 ViewtextAppearance 上,但如果您不关心,这比接受的答案要简单一些parent.

lineSpacingMultiplier 以及 lineSpacingExtra 你只能在风格上申请。

但作为替代方案,您可以使用 lineHeight 属性,该属性可以使用 textAppearance.

应用于 MaterialTextView

有趣的是,如果您使用完整的 Material 主题(不是 Bridge),您所有的 TextView 将 auto-inflate 到 MaterialTextView,否则,您将需要在 xml.

中指定 <com.google.android.material.textview