这个问题已被多次询问,但从未得到正确答案。
如何构建布局(类似于最常见的消息应用程序,如Whatsapp,Telegram),具有以下特征:
我试图通过相对布局来达到它。
<RelativeLayout android:id="@+id/message_bubble_container"
android:layout_below="@+id/message_date_separator_container"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/chat_message_background"
android:padding="4dp">
<RelativeLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<TextView
style="@style/TextAppearance.AppCompat.Medium"
android:id="@+id/message_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
tools:text="This is a message long that causes the date to leave the screen!" />
<TextView
style="@style/TextAppearance.AppCompat.Small"
android:id="@+id/message_time"
android:layout_alignBottom="@id/message_text"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/message_text"
android:textColor="@color/material_grey_900"
android:textSize="12sp"
tools:text="18:58"
android:paddingLeft="4dp"/>
</RelativeLayout>
</RelativeLayout>
当文本消息在一行上时它很好用,但是当它增长以填充容器的宽度时,它会从屏幕上推出日期。如何避免此行为并使文本消息在日期右侧保留边距?
如果这是CSS,我只需要向margin-right: 40px;
添加.message_text
。当然这是Android而不是CSS ......
此外,我不喜欢在maxWidth
上使用@id/message_text
,因为我不知道屏幕会显示多少dp。
最后,我听到过一些关于FlowLayout
的讨论。有办法吗?
感谢任何人都会尝试解决这个影响任何人开发聊天布局的问题。
答案 0 :(得分:0)
使用垂直方向的线性布局而不是相对布局。像这样:
<LinearLayout android:id="@+id/message_bubble_container"
android:layout_below="@+id/message_date_separator_container"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:background="@drawable/chat_message_background"
android:padding="4dp">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical">
<TextView
style="@style/TextAppearance.AppCompat.Medium"
android:id="@+id/message_text"
android:gravity="right"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
tools:text="This is a message long that causes the date to leave the screen!" />
<TextView
style="@style/TextAppearance.AppCompat.Small"
android:id="@+id/message_time"
android:layout_alignBottom="@id/message_text"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/message_text"
android:textColor="@color/material_grey_900"
android:textSize="12sp"
tools:text="18:58"
android:paddingLeft="4dp"/>
</LinearLayout>
</LinearLayout>
尝试,让我知道它有效。 :)
答案 1 :(得分:0)
从内部相对布局中取出该日期文本视图,并将其保持在父对齐布局中,并使用alignparentbottom为true并对齐parentright true
快乐编码