对齐 TextView 基线和另一个 TextView 底部

Posted

技术标签:

【中文标题】对齐 TextView 基线和另一个 TextView 底部【英文标题】:Align TextView baseline and another TextView bottom 【发布时间】:2017-02-15 00:03:45 【问题描述】:

我有RelativeLayout和两个TextView,其中一个有背景。

在图像上两个基线对齐,但我想对齐一个基线和另一个基线底部。

这是我的 xml 代码。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:background="?attr/selectableItemBackground"
    android:paddingEnd="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingStart="16dp"
    >

    <!-- other stuff -->

    <TextView
        android:id="@+id/text_view_unread_message_count"
        android:layout_
        android:layout_
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/text_view_last_message_date"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:background="@drawable/chat_unread_message_count_background"
        style="@style/ChatRoomUnreadMessageCountTextStyle"
        tools:text="101"
        />

  <TextView
      android:id="@+id/text_view_last_message"
      android:layout_
      android:layout_
      android:layout_below="@+id/text_view_title"
      android:layout_toEndOf="@id/image_view_icon"
      android:layout_toLeftOf="@id/text_view_unread_message_count"
      android:layout_toRightOf="@id/image_view_icon"
      android:layout_toStartOf="@id/text_view_unread_message_count"
      android:ellipsize="end"
      android:layout_alignBaseline="@+id/text_view_unread_message_count"
      android:gravity="bottom"
      android:maxLines="1"
      tools:text="My life is a story book with many different chapters but I don’t let everyone read it."
      style="@style/ChatRoomLastMessageTextStyle"
      />

</RelativeLayout>

我尝试将 TextView 与背景包装到不同的 ViewGrops 中,将两个 TextView 包装到布局中,无济于事。

【问题讨论】:

嘿@Erdeni Erdyneev 试试android:layout_alignBottom="@+id/text_view_unread_message_count" 而不是android:layout_alignBaseline="@+id/text_view_unread_message_count" 为什么将 android:gravity="bottom" 设置为 last_message。而是在其中添加一些 marginBottom。 @MashukKhan android:layout_alignBottom 对齐文本底线,而不是基线 @Nepster 如果我设置 marginBottom 并且用户设置大文本大小,最后一条消息将与上面的聊天标题重叠 【参考方案1】:

你可以做一个小技巧,我们开始吧:

text_view_unread_message_count 放在某个视图组中,例如RelativeLayout 并使用 SP 缩放添加一个 paddingBottom(这是您手动对齐的空间),如下所示:

Obs.:您需要为 TextView 提供一个新 ID,这是一个示例 ID,可以更改大小值。

   <!-- sp scaling will change with font size -->
    <RelativeLayout
        android:layout_
        android:layout_
        android:paddingBottom="10sp"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:layout_toEndOf="@id/image_view_icon"
        android:layout_toLeftOf="@id/text_view_unread_message_count"
        android:layout_toRightOf="@id/image_view_icon"
        android:layout_toStartOf="@id/text_view_unread_message_count">
        <TextView
                android:layout_
                android:layout_
                android:background="@drawable/chat_unread_message_count_background"
                style="@style/ChatRoomUnreadMessageCountTextStyle"
                tools:text="101"
        />
    </RelativeLayout>

将您的位置定义放在父级上,将文本定义放在 textview 上。这应该可以。

【讨论】:

谢谢!它们对齐不理想,但比以前更好【参考方案2】:

您可以通过编程方式设置所需的下边距。

val bottomToBaselineHeight = textViewLastMessage.height - textViewLastMessage.baseline
textViewUnreadMessageCount.margin(bottom = bottomToBaselineHeight)

【讨论】:

以上是关于对齐 TextView 基线和另一个 TextView 底部的主要内容,如果未能解决你的问题,请参考以下文章

使 android-textview 的某个部分向右对齐

将 ImageSpan 对齐到 TextView 的顶部

Android中的文本/布局对齐(textAlignment,gravity)

Android XML - 如何让项目在最左边、中间和最右边对齐

将字段标签的基线与文本输入中的文本基线对齐

将 SwiftUI 文本与另一个文本的基线和顶部对齐