Android - 自定义列表视图项始终位于左侧
Android - custom list view item always sits to the left
你好
我构建了一个聊天应用程序,它使用带有自定义列表项的列表视图 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_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal" >
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/chat_bubble_right"
android:layout_gravity="right"
android:gravity="right"
android:layout_weight="1">
</TextView>
</LinearLayout>
谢谢
请换你xml代码中不需要设置gravity:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleLeft"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/chat_bubble_right"
android:layout_gravity="right"
android:gravity="right"
android:layout_weight="1">
</TextView>
</FrameLayout >
我认为问题在于,您将聊天气泡的可见性设置为 View.GONE。尝试使用 View.INVISIBLE。
Gone 意味着视图使用的地方 "collapses"。隐身还在那里,不塌陷
感谢大家的帮助。
在这个 post 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
你好
我构建了一个聊天应用程序,它使用带有自定义列表项的列表视图 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_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal" >
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/chat_bubble_right"
android:layout_gravity="right"
android:gravity="right"
android:layout_weight="1">
</TextView>
</LinearLayout>
谢谢
请换你xml代码中不需要设置gravity:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:textSize="18sp"
android:id="@+id/tvChatBubbleLeft"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/chat_bubble_right"
android:layout_gravity="right"
android:gravity="right"
android:layout_weight="1">
</TextView>
</FrameLayout >
我认为问题在于,您将聊天气泡的可见性设置为 View.GONE。尝试使用 View.INVISIBLE。 Gone 意味着视图使用的地方 "collapses"。隐身还在那里,不塌陷
感谢大家的帮助。
在这个 post 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