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

时间:2017-02-13 22:20:18

标签: android android-styles android-textattributes

我正在尝试在textAppearance样式(android:lineSpacingMultiplier)中添加android:textAppearance,但它无效。我做错了吗?

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 个答案:

答案 0 :(得分:5)

无论出于何种原因,android:lineSpacingMultiplier都无法作为textAppearance中的项目。您必须将其直接设置为TextView属性(使用android:lineSpacingMultiplier),或者创建一个“包装”设置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"
    />

答案 1 :(得分: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:textAppearance应用于定义TextView的给定style的{​​{1}}不起作用(我推测这可能是由于事实上,行间距是android:lineSpacingMultiplier本身而不是View的{​​{1}},但如果你不关心父母,这比接受的答案要简单一点

答案 2 :(得分:0)

lineSpacingMultiplierlineSpacingExtra只能以样式应用。

但是,您也可以使用lineHeight属性,该属性可以使用MaterialTextView应用于textAppearance

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