Android - 自定义列表视图项始终位于左侧
Posted
技术标签:
【中文标题】Android - 自定义列表视图项始终位于左侧【英文标题】:Android - custom list view item always sits to the left 【发布时间】:2016-02-11 09:32:15 【问题描述】:您好我已经构建了一个聊天应用程序,它使用带有自定义列表项 xml 的列表视图来在屏幕上显示聊天消息。 我的应用程序将在左侧或右侧显示一个文本视图,具体取决于消息来自谁。它通过将文本设置为右侧或左侧文本视图,然后显示和隐藏相关视图来做到这一点。我的问题是,无论我如何尝试在自定义列表项中排列视图,它们将始终出现在屏幕的左侧。我尝试在我的xml中设置重力,以编程方式设置它,使用fill_parent,使用加权视图。它只是不会从左边让步!有没有人对此有解决方案或可以看到我哪里出错了?
@Override
public View getView(int position, View convertView, ViewGroup parent)
if (convertView == null)
convertView = LayoutInflater.from(getContext()).inflate(R.layout.chat_item, parent, false);
final ViewHolder holder = new ViewHolder();
holder.chatRight = (TextView)convertView.findViewById(R.id.tvChatBubbleRight);
holder.chatLeft = (TextView)convertView.findViewById(R.id.tvChatBubbleLeft);
convertView.setTag(holder);
final ParseChat parseChat = (ParseChat)getItem(position);
final ViewHolder holder = (ViewHolder)convertView.getTag();
final boolean isMe = parseChat.getSender().equals(mUserId);
// Show-hide image based on the logged-in user.
// Display the profile image to the right for our user, left for other users.
if (isMe)
holder.chatRight.setText(parseChat.getMessage());
holder.chatRight.setGravity(Gravity.RIGHT);
holder.chatRight.setVisibility(View.VISIBLE);
holder.chatLeft.setVisibility(View.GONE);
else
holder.chatLeft.setText(parseChat.getMessage());
holder.chatLeft.setGravity(Gravity.LEFT);
holder.chatLeft.setVisibility(View.VISIBLE);
holder.chatRight.setVisibility(View.GONE);
return convertView;
chat_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:gravity="center"
android:orientation="horizontal" >
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleLeft"
android:layout_
android:layout_
android:background="@drawable/chat_bubble_left"
android:layout_gravity="left"
android:layout_weight="1"
android:gravity="left">
</TextView>
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleRight"
android:layout_
android:layout_
android:background="@drawable/chat_bubble_right"
android:layout_gravity="right"
android:gravity="right"
android:layout_weight="1">
</TextView>
</LinearLayout>
谢谢
【问题讨论】:
请发布您的chat_item.xml
【参考方案1】:
我认为问题在于,因为您将聊天气泡的可见性设置为 View.GONE。尝试使用 View.INVISIBLE。 Gone 意味着视图使用的地方“崩溃”。不可见的仍然存在,不会崩溃。
【讨论】:
刚试过,这让它稍微靠右一点,但仍然没有固定在屏幕的右侧 似乎对我有用。尝试将 textfields 宽度设置为 0dp,这意味着它会自行获取宽度。【参考方案2】:请更改您的 xml,您无需在代码中设置重力:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:gravity="center"
android:orientation="vertical" >
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleLeft"
android:layout_
android:layout_
android:background="@drawable/chat_bubble_left"
android:layout_gravity="left"
android:layout_weight="1"
android:gravity="left">
</TextView>
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleRight"
android:layout_
android:layout_
android:background="@drawable/chat_bubble_right"
android:layout_gravity="right"
android:gravity="right"
android:layout_weight="1">
</TextView>
</FrameLayout >
【讨论】:
没有帮助,恐怕:(【参考方案3】:感谢大家的帮助。在这篇文章left and right alignment rows inside Listview?的帮助下,我设法做到了这一点
~ 在 chat_item.xml 中,父 LinearLayout 的 layout_width 属性应该设置为 wrap_content 而不是 match_parent
~在chat_activity.xml中,ListView的layout_width属性应该设置为match_parent。不是 wrap_content
【讨论】:
以上是关于Android - 自定义列表视图项始终位于左侧的主要内容,如果未能解决你的问题,请参考以下文章
从自定义列表 Xamarin 中设置所选列表视图项的背景颜色