首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecyclerView gravity to聊天消息

RecyclerView gravity to聊天消息
EN

Stack Overflow用户
提问于 2015-11-19 23:01:19
回答 5查看 4K关注 0票数 1

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

我尝试过的:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
<?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>

这里我漏掉了什么?

感谢您的时间,任何帮助都是非常感谢的!

EN

回答 5

Stack Overflow用户

发布于 2015-11-19 23:12:04

下面是我的工作代码:

代码语言:javascript
复制
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即可。

票数 2
EN

Stack Overflow用户

发布于 2015-11-20 00:15:21

LinearLayout设置为macth_parent

设置每个子视图的layout gravity

代码语言:javascript
复制
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>
票数 1
EN

Stack Overflow用户

发布于 2017-11-04 07:54:38

只需将布局文件更改为以下内容

代码语言:javascript
复制
<?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"/>

刚刚用"match_parent“替换了android:layout_width="wrap_content”

希望能行得通。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33807350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档