android:lineSpacingMultiplier在android:textAppearance中不起作用

7

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

TextAppearance样式:

<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"
    />
3个回答

9
无论什么原因,“android:lineSpacingMultiplier”无法作为“textAppearance”的一项工作。您需要直接将其设置为“TextView”属性(使用“android:lineSpacingMultiplier”),或者创建一个普通样式,将“textAppearance”和“lineSpacingMultiplier”设置“包装”起来。
创建一个样式:
<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"
    />

1

lineSpacingMultiplierlineSpacingExtra只能在样式中应用。

但是,作为替代方案,您可以使用lineHeight属性,该属性可应用于MaterialTextView,并使用textAppearance进行设置。

有趣的是,如果您使用完全的Material主题(而不是Bridge),则所有TextView都将自动膨胀为MaterialTextView,否则,您需要在xml中指定<com.google.android.material.textview


0
我能够通过将style应用于TextView本身而不是textAppearance来解决这个问题(与接受的答案类似,但代码稍微少了一些)。
以下是一个示例:
样式:
<style name="TextBody1" parent="TextAppearance.AppCompat.Body1">
  <item name="android:lineSpacingMultiplier">1.25</item>
</style> 

如果您不关心父级,则更简单:

<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:lineSpacingMultiplierstyle 上应用 android:textAppearance 到一个 TextView 上不起作用(我猜测这可能是因为行间距在样式 View 本身上而不是 ViewtextAppearance),但如果您不关心父级,则比接受的答案简单一些。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接