Android RecyclerView可查看聊天信息

Android RecyclerView可查看聊天信息,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我正在开发一个聊天应用程序,但我不知道如何根据用户发送/接收的信息调整消息(重力) 我所尝试的: @Override public void onBindViewHolder(final MessageDialogViewHolder holder, int position) { final QBChatMessage item = messageList.get(position); holder.attachEntity(item);

我正在开发一个聊天应用程序,但我不知道如何根据用户发送/接收的信息调整消息(重力)

我所尝试的:

@Override
    public void onBindViewHolder(final MessageDialogViewHolder holder, int position) {
        final QBChatMessage item = messageList.get(position);
        holder.attachEntity(item);
        holder.text.setText(item.getBody());
        holder.personName.setText(ChatService.getInstance().getDialogsUsers().get(item.getSenderId()).getFullName());

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        if(item.getSenderId().equals(ChatService.getInstance().getCurrentUser().getId())){
            params.gravity = Gravity.END;
            holder.container.setGravity(Gravity.END);
        }else{
            params.gravity = Gravity.START;
            holder.container.setGravity(Gravity.START);
        }

        holder.container.setLayoutParams(params);

    }
我的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/singleMessageContainer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bubble_b"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/imgMessage"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_gravity="start"
        android:visibility="gone"/>

    <TextView
        android:id="@+id/personName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:textSize="14sp"
        />

    <TextView
        android:id="@+id/singleMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_margin="5dip"
        android:paddingLeft="10dip"
        android:text=""
        android:textColor="@android:color/primary_text_light"/>
</LinearLayout>

我错过了什么


感谢您的时间,任何帮助都将不胜感激

这是我的工作代码:

public class MessageLentItem extends LinearLayout {

    public MessageLentItem(Context context, String textMessage, boolean fromMe) {
        super(context);
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.message_lent_item, this);

        LinearLayout mainLayout = (LinearLayout) view.findViewById(R.id.mainLayout);
        LinearLayout messageLayout = (LinearLayout) view.findViewById(R.id.messageLayout);
        TextView messageText = (TextView) view.findViewById(R.id.messageText);

        messageText.setText(textMessage);
        if (fromMe) {
            mainLayout.setGravity(Gravity.RIGHT);
            messageText.setPadding(10, 5, 20, 5);
            messageLayout.setBackgroundResource(R.drawable.balloon_outgoing_normal);
        } else {
            mainLayout.setGravity(Gravity.LEFT);
            messageText.setPadding(20, 5, 10, 5);
            messageLayout.setBackgroundResource(R.drawable.balloon_incoming_normal);
        }
    }
只需将xml中的
Linearlayout
替换为
Relative

这一定是一条评论,不是回答,但我没有足够的信誉点

我会放一条Log.d()消息:

看看里面的“=”是否有效

此外,我将尝试使用RelativeLayout而不是LinearLayout,并使用layout\u alignParentStart、layout\u alignParentEnd等更改内部元素的布局重力。

LinearLayout
设置为
macth\u parent

设置每个子视图的
布局重力

LinearLayout.LayoutParams lp = (LinearLayout.layoutParams)holder.personName.getLayoutParams();

lp.gravity = Gravity.LEFT or lp.gravity = Gravity.RIGHT;

holder.personName.setLayoutParams(lp)


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/singleMessageContainer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:src="@mipmap/ic_launcher"
        android:id="@+id/imgMessage"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_gravity="left"
        android:visibility="visible"/>

    <TextView
        android:text="left"
        android:id="@+id/personName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:textSize="14sp"
        />

    <TextView

        android:id="@+id/singleMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_margin="5dip"
        android:paddingLeft="10dip"
        android:text="left"
        android:textColor="@android:color/primary_text_light"/>


    <ImageView
        android:src="@mipmap/ic_launcher"
        android:id="@+id/imgMessage1"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_gravity="right"
        android:visibility="visible"/>

    <TextView
        android:text="left"
        android:id="@+id/personName1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:textSize="14sp"
        />

    <TextView

        android:id="@+id/singleMessag1e"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_margin="5dip"
        android:paddingLeft="10dip"
        android:text="left"
        android:textColor="@android:color/primary_text_light"/>
</LinearLayout>
LinearLayout.LayoutParams lp=(LinearLayout.LayoutParams)holder.personName.getLayoutParams();
lp.gravity=gravity.LEFT或lp.gravity=gravity.RIGHT;
holder.personName.setLayoutParams(lp)

只需将布局文件更改为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/singleMessageContainer"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bubble_b"
android:orientation="vertical">

<ImageView
    android:id="@+id/imgMessage"
    android:layout_width="25dp"
    android:layout_height="25dp"
    android:layout_gravity="start"
    android:visibility="gone"/>

<TextView
    android:id="@+id/personName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:textSize="14sp"
    />

<TextView
    android:id="@+id/singleMessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:layout_margin="5dip"
    android:paddingLeft="10dip"
    android:text=""
    android:textColor="@android:color/primary_text_light"/>

刚刚更换 android:layout\u width=“包装内容” “匹配父项”

希望能奏效。

试试看
新的StaggedGridLayoutManager(2,GridLayoutManager.VERTICAL)

不。你应该设置孩子的重力。我不知道这将如何解决我的问题。看看我的代码。它与父级重力无关。我真的需要覆盖LinearLayout来在运行时设置重力吗?不,这只是一个例子。当您将android:layout\u gravity=“start”更改为android:layout\u gravity=“end”。预览中没有任何更改?LinearLayout的android:layout\u width=“wrap\u content”更改为android:layout\u width=“macth\u parent”进行布局更改时,气球将显示在整个屏幕上。我希望有一种类似whatsApp的行为,气球包装内容,并且在每一面我都没有使用whatsApp。你能提供一个屏幕截图吗?幸运的是,这实际上不是一个评论。但在将来,请不要试图通过发布答案来绕过评论限制——这只意味着那些必须删除答案的人需要做更多的工作。大家好,欢迎来到Stack Overflow。听起来这可能是一个好主意——也许你可以发布更多的代码片段,展示如何获得OP想要的东西?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/singleMessageContainer"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bubble_b"
android:orientation="vertical">

<ImageView
    android:id="@+id/imgMessage"
    android:layout_width="25dp"
    android:layout_height="25dp"
    android:layout_gravity="start"
    android:visibility="gone"/>

<TextView
    android:id="@+id/personName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:textSize="14sp"
    />

<TextView
    android:id="@+id/singleMessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:layout_margin="5dip"
    android:paddingLeft="10dip"
    android:text=""
    android:textColor="@android:color/primary_text_light"/>