Android - 自定义列表视图项始终位于左侧

时间:2015-11-10 13:27:38

标签: android listview arraylist android-listview listadapter

你好

我已经建立了一个聊天应用程序,它使用带有自定义列表项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>

谢谢

3 个答案:

答案 0 :(得分:1)

请更改xml,无需在代码中设置重力:

<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 > 

答案 1 :(得分:1)

我认为问题在于,因为您正在将聊天气泡的可见性设置为View.GONE。尝试使用View.INVISIBLE。 已经过去了,视图使用的地方“崩溃”。隐形仍然存在,并没有崩溃。

答案 2 :(得分:0)

感谢大家的帮助。
我设法在这篇文章的帮助下做到了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