我正在尝试在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"
/>
答案 0 :(得分:5)
无论出于何种原因,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 :(得分: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)
lineSpacingMultiplier
和lineSpacingExtra
只能以样式应用。
但是,您也可以使用lineHeight
属性,该属性可以使用MaterialTextView
应用于textAppearance
。
有趣的是,如果您使用完整的Material主题(而不是Bridge),则所有TextView
都会自动膨胀为MaterialTextView
,否则,您需要在<com.google.android.material.textview
中指定xml。