【发布时间】:2012-05-12 22:26:20
【问题描述】:
我有一个列表视图来显示聊天中的消息。我想在左侧显示收到的消息,在右侧显示已发送的消息。 请考虑对齐包含的视图是不够的,因为我需要显示条目的背景,并且背景也应该对齐。所以整个条目应该对齐。
有办法吗?
我尝试使用android:layout_gravity="right",但没有成功。
【问题讨论】:
标签: android listview alignment
我有一个列表视图来显示聊天中的消息。我想在左侧显示收到的消息,在右侧显示已发送的消息。 请考虑对齐包含的视图是不够的,因为我需要显示条目的背景,并且背景也应该对齐。所以整个条目应该对齐。
有办法吗?
我尝试使用android:layout_gravity="right",但没有成功。
【问题讨论】:
标签: android listview alignment
当然! 你需要一个适配器。在适配器中,当您为 ListItem 充气时,只需为发送和接收的消息充气不同的 Item!
【讨论】:
您可以尝试使用LayoutParams 在适配器中以编程方式设置参数。
已发送消息类似于以下内容:
LinearLayout ll = (LinearLayout) findViewById(R.id.MyLinearLayout);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)ll.getLayoutParams();
params.gravity = Gravity.RIGHT;
ll.setLayoutParams(params);
对于收到的消息,反之(将 RIGHT 更改为 LEFT)。
【讨论】:
我设法做到了:
LayoutParams params = (LayoutParams) frame.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, alignRight?0:1);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, alignRight?1:0);
frame.setLayoutParams(params);
重要的是我必须在 RelativeLayout 中为我的条目添加一个框架,因为 params.addRule 仅适用于 RelativeLayout。如果您尝试对传递给 bindView 的视图执行相同操作,则会得到一个不支持 addRule 的不同 LayoutParam
【讨论】: