我正在创建一个消息传递应用程序,目前正在处理收件箱。我使用RecyclerView
来显示会话列表,并希望每个列表项看起来像这样:
我打算使用layout_weight
,但这不适用于RelativeLayout
(并且在短日期的情况下不允许联系人姓名延长) LinearLayout
不允许我使用layout_toEndOf
。我是Android开发的新手,所以我不确定其中一个是否是"对"回答。
完成我正在寻找的布局的正确方法是什么?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/conversation_info"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/activity_horizontal_margin">
<RelativeLayout
android:id="@+id/conversation_image_layout"
android:layout_width="90dp"
android:layout_height="90dp">
<ImageView
android:id="@+id/conversation_contact_image"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
<TextView
android:id="@+id/conversation_contact_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:gravity="center_vertical"
android:textSize="@dimen/conversations_contact_font_size"
android:layout_toEndOf="@id/conversation_image_layout" />
<TextView
android:id="@+id/conversation_date"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/conversation_contact_name"
android:gravity="right"
android:paddingRight="@dimen/activity_horizontal_margin"
android:textSize="@dimen/conversations_date_font_size" />
<TextView
android:id="@+id/conversation_snippet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/conversation_contact_name"
android:textSize="@dimen/conversations_snippet_font_size"
android:layout_toRightOf="@id/conversation_image_layout" />
</RelativeLayout>
</LinearLayout>
这是列表项目目前的样子(我还没有加载联系人图片)。它在大多数情况下都很好(尽管我的布局代码可能非常臃肿,所以如果有人能指出使其更简洁的方法,我会感激,但请注意日期不是如此)与联系人姓名和包装相同的级别:
答案 0 :(得分:0)
其中一个textView有MarginTop属性,另一个没有。在两者上删除它或将它添加到两者:
<TextView
android:id="@+id/conversation_contact_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:gravity="center_vertical"
android:textSize="@dimen/conversations_contact_font_size"
android:layout_toEndOf="@id/conversation_image_layout" />
<TextView
android:id="@+id/conversation_date"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/conversation_contact_name"
android:gravity="right"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:textSize="@dimen/conversations_date_font_size" />
此外,我建议您使用带有嵌套线性布局和权重的线性布局,以便在不同的屏幕和设备上获得更好的性能。如果您在其他设备上运行它,这可能会崩溃。不要相信我,试试吧:)。
答案 1 :(得分:0)
在我清楚地知道某些布局参数并不意味着我认为他们做了什么之后,我花了一些时间来看看我的选择。
不建议在列表项中嵌套LinearLayouts / use layout_weight
,因为随着更多项目的添加,创建的视图数量会迅速增加。我设法缩小我的代码并使用以下代码将其保存在单个RelativeLayout中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/conversation_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_horizontal_margin">
<ImageView
android:id="@+id/conversation_contact_image"
android:layout_width="64dp"
android:layout_height="64dp"/>
<TextView
android:id="@+id/conversation_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/conversations_contact_font_size"
android:layout_toEndOf="@id/conversation_contact_image"/>
<TextView
android:id="@+id/conversation_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignBaseline="@id/conversation_contact_name"
android:textSize="@dimen/conversations_date_font_size"/>
<TextView
android:id="@+id/conversation_snippet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/conversation_contact_name"
android:textSize="@dimen/conversations_snippet_font_size"
android:layout_toEndOf="@id/conversation_contact_image"/>
</RelativeLayout>
值得注意的变化:
layout_alignBaseline
- @Vucko指出我在联系人姓名上使用marginTop
但未使用日期。即使在取下它之后,两者仍未对准。 android:gravity
没有效果,事实证明这些都不会影响布局中的文字layout_alignParentEnd
来修复日期问题。我已经意识到,在我的情况下,布局组件通常只需要引用另一个,以便相对于布局的其余部分正确对齐自己。