【问题标题】:android:lineSpacingMultiplier doesn't work in android:textAppearanceandroid:lineSpacingMultiplier 在 android:textAppearance 中不起作用
【发布时间】:2017-07-02 01:27:07
【问题描述】:
我正在尝试在我的 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"
/>
【问题讨论】:
标签:
android
android-styles
android-textattributes
【解决方案1】:
lineSpacingMultiplier 和lineSpacingExtra 只能以风格申请。
但作为替代方案,您可以使用lineHeight 属性,该属性可以使用textAppearance 应用于MaterialTextView。
有趣的是,如果您使用完全 Material 主题(不是 Bridge),您的所有 TextView 将自动膨胀为 MaterialTextView,否则,您需要在 xml 中指定 <com.google.android.material.textview。
【解决方案2】:
我能够通过简单地将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 应用于具有给定style 的TextView 并定义android:lineSpacingMultiplier 不起作用(我推测这可能是由于行距在样式View 本身而不是View 的textAppearance)但是如果您不关心父母,这比接受的答案要简单一些。
【解决方案3】:
无论出于何种原因,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"
/>