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 - 自定义列表视图项始终位于左侧的主要内容,如果未能解决你的问题,请参考以下文章

如何删除android中的自定义列表视图项?

从自定义列表 Xamarin 中设置所选列表视图项的背景颜色

android布局从屏幕推送视图

WPF 自定义用户控件绑定在列表视图中始终返回 false

将自定义 ListView 项传递给 Android 中的其他活动

如何获取 AlertDialog 中自定义列表视图的单击项的值?