android - TextView lineSpacingMultiplier 小于零会截断最后一行

标签 android android-layout

我有一个 TextView,我希望行间距小于 1.0,即行间距小于默认值。我已经这样做了:

  <TextView
    android:id="@+id/text_header"
    android:layout_width="@dimen/text_header_width"
    android:layout_height="wrap_content"
    android:text="@string/header_text"
    android:textSize="@dimen/text_header_text_size"
    android:typeface="helvetica"
    android:lineSpacingMultiplier="0.95" />

但在底行的文本中,下行字母(例如 y's、g's 和 p's)被稍微砍掉了。换句话说,这些字母的底部大约有 2 或 3 个像素丢失。

我试过使用边距和填充但没有成功。我似乎可以通过使用指定的高度(有一点额外的空间)而不是 wrap_content 来解决这个问题,但我想尽可能避免这种情况。

最佳答案

根据我的测试,它看起来像是 android 版本低于 api 21 的问题。 我是这样解决的:

在我的例子中,我使用了 TextView最多有 2 行末尾有椭圆。

我的样式TextView在 api 21 ( values/style.xml ) 之前

<style name="MyTextViewStyle" parent="Base.TextAppearance.AppCompat">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:gravity">left</item>
    <item name="android:textColor">@color/blue_dark</item>
    <item name="android:textSize">16sp</item>
    <item name="android:maxLines">2</item>
    <item name="android:ellipsize">end</item>
    <item name="android:lineSpacingExtra">-4dp</item>
    <item name="android:paddingTop">0dp</item>
    <item name="android:paddingBottom">4dp</item>
    <item name="android:includeFontPadding">false</item>
</style>

我的样式TextView对于 api 21 及之后 ( values-v21/style.xml )

<style name="MyTextViewStyle" parent="Base.TextAppearance.AppCompat">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:gravity">left</item>
    <item name="android:textColor">@color/blue_dark</item>
    <item name="android:textSize">16sp</item>
    <item name="android:maxLines">2</item>
    <item name="android:ellipsize">end</item>
    <item name="android:lineSpacingExtra">-4dp</item>
    <item name="android:paddingTop">0dp</item>
    <item name="android:paddingBottom">0dp</item>
    <item name="android:includeFontPadding">true</item>
</style>

这里的 secret 主要是android:paddingBottom这与 android:lineSpacingExtra 相反在 api 21 之前。在我的设备上,它纠正了最后一行在底部被截断的错误。

注:<item name="android:lineSpacingExtra">-4dp</item>看起来它相当于 <item name="android:lineSpacingMultiplier">0.8</item> .

关于android - TextView lineSpacingMultiplier 小于零会截断最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11575425/

相关文章:

java - PeriodicWorkRequest 不尊重重复时间

android - 如何在 Android 10 (Q) 上直接从外部下载目录读取文件

android - 我的数据库中的搜索过滤器有问题

android - 是否可以更改 Android 工具栏的默认矩形形状?

android - 如何在一个地方定义按钮背景并在整个应用程序中使用?

java - 在Java中设置PercentRelativeLayout百分比

java - 框架布局 : View Arrrangement and Null Pointer Exception

java - 在 onTouchEvent 和 dispatchTouchEvent 中返回 true 无法正常工作

android - 保留 viewpager fragment android 的状态

android - 是否可以将 xml 布局设置为不是动态资源的 View ?