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