删除 TextView 中的顶部和底部间距

Posted

技术标签:

【中文标题】删除 TextView 中的顶部和底部间距【英文标题】:Remove top and bottom spacing in TextView 【发布时间】:2020-12-05 10:38:06 【问题描述】:

如何删除文本顶部和底部的间距?我想让两个文本相互接触,或者至少减少文本之间的间距。

我看过其他推荐设置 android:includeFontPadding="false" 的帖子,但这不起作用。

<TextView
    android:id="@+id/textView"
    android:layout_
    android:layout_
    android:textSize="96sp"
    android:text="TEXT1"
    android:background="@color/primaryColor"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/textView2"
    android:layout_
    android:layout_
    android:textSize="96sp"
    android:text="TEXT2"
    android:background="@color/secondaryColor"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/textView" />

【问题讨论】:

使用android:includeFontPadding="false" 确实会稍微减少间距,尽管不是完全。显示某些字符时实际上需要剩余空间(尝试çÉ,它到达顶部和底部)如果您仍然想摆脱那个空间,您可以通过自定义间距来实现,例如在第二个文本。如果您想保留背景,则需要制作自定义视图。 【参考方案1】:

问题在于这不仅仅是空白 - 它是字体的上升和下降,像 g 的下部这样的地方。 TextView 必须有那个空间,因为它不知道你不会使用它。 includeFontPadding 影响上升顶部的一些重音,因此您可以删除一点空间,但其余部分是必需的。

没有得到没有上升和下降的字体,老实说,我认为你能做的最好的事情是将下部TextView的顶部限制到上部的顶部,并添加一个marginTop 值,可将其向下移动到您想要的位置。使用 sp 值而不是 dp 以便它保持相对于用户的字体大小偏好 - 如果您更改字体,则需要对其进行调整。并且背景必须是分开的,在文本视图后面,如果你使用那些

【讨论】:

【参考方案2】:

如果您不惜一切代价绝对想要这个,那么您可以执行以下操作,我尚未检查它是否适用于不同的屏幕尺寸。但是您可以将它们的顶部都附加到同一个视图,可以是父视图,然后使背景透明,如果您选择不同的颜色,那么这将不起作用,保持文本全部大写,这样常规字母就不能再高了或更低。根据您将在 dp 中给出的文本大小保持边距。这可能是“我无论如何都想要”的方法,而不是可接受的方法。

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/textView"
        android:layout_
        android:layout_
        android:textSize="95dp"
        android:text="TEXT1"
        
        android:background="@android:color/transparent"
       
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginTop="0dp"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_
        android:layout_
        android:background="@android:color/transparent"
        android:text="TEXT2"
        android:textSize="95dp"
        android:layout_marginTop="75dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

【参考方案3】:

您可以使用Space 视图做一些聪明的事情来完成这项工作:

<TextView android:id="@+id/textView1"
    [other TextView stuff]
    app:layout_constraintTop_toTopOf="parent"/>
<Space android:id="@+id/space"
    android:layout_marginBottom="20dp"
    app:layout_constraintBottom_toBottomOf="@id/textView1"/>
<TextView android:id="@+id/textView2"
    [other TextView stuff]
    app:layout_constraintTop_toBottomOf="@id/space"/>

然后在Space 视图中调整margin 参数,直到文本出现在您想要的位置。

【讨论】:

在使用ConstraintLayout 时,绝对没有正当理由使用Space 然后请演示如何操作。请注意,不支持负边距。

以上是关于删除 TextView 中的顶部和底部间距的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 textView 上的顶部和底部填充?

SwiftUI Text 意外填充底部和顶部

如何在iOS中从UITextview的顶部和底部移除多余的空间?

文本顶部和底部的间距相等

自动布局等间距和加权间距

如何删除 Android Checkbox 的内部图像填充(顶部、左侧和底部)