对齐 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中的文本/布局对齐(textAlignment,gravity)