java - 无法根据 RecyclerView 中的发件人对齐聊天消息

标签 java android xml

我正在使用 RecyclerView。我正在向适配器传递 Message 对象的列表。我想根据发件人组织或对齐聊天消息。如果发件人是当前用户本人,则消息将在右侧对齐,否则在左侧对齐。尝试了很多方法。仍然无法得到解决方案!

public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder>{
    private List<Message> Message;
    private Context context;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView message_text;
        public User user;
        public ViewGroup parent;

        public ViewHolder(View itemView) {
            super(itemView);
            message_text = (TextView) itemView.findViewById(R.id.message_text);

            user = Methods.getUserInstance(message_text.getContext());
        }
    }
    public MessageAdapter(Context context, List<Message> message) {
        this.context = context;
        this.Message = message;
    }

    public void add(int position, Message message) {
        Message.add(position, message);
    }

    @Override
    public MessageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_message, parent, false);
        ViewHolder vh = new ViewHolder(v);
        vh.parent = parent;
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Message m = Message.get(position);
        holder.message_text.setText(m.getText());
        if (holder.user.getUsername().equals(m.getUsername())) {
            //here goes the manipulation!
        }

        Toast.makeText(holder.message_text.getContext(), m.getUsername(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public int getItemCount() {
        return Message.size();
    }
}

这是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:weightSum="1"
    android:paddingRight="10dp"
    android:paddingLeft="10dp">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="289dp"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/message_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:background="@drawable/reciever_rounded_message"
                android:padding="16dp"
                android:text="chakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakkachakka" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

请帮忙。 提前致谢!

最佳答案

将其用作 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:paddingLeft="10dp">

<TextView
    android:id="@+id/reply_text"
    android:layout_width="289dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:text="some text here!" />

</RelativeLayout>

如果当前用户使用 Layoutparams,则将父级对齐。您可以使用 View.getLayoutParams 从代码中访问任何 LayoutParams,以便在当前用户时对齐父级。

if (holder.user.getUsername().equals(m.getUsername())) {
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)message_text.getLayoutParams();
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        message_text.setLayoutParams(params);
    }

关于java - 无法根据 RecyclerView 中的发件人对齐聊天消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41529923/

相关文章:

java - 开发 Java Swing 应用程序,该应用程序将使用数据库存储数据并将其显示在 JFrame 上

java - 如何使用在 Android studio 中自动创建的内部静态 Placeholder Fragment 类?

android - 带有 android 和 maven-android-plugin 的 Cloudbees

android - 如何获得android渐变中心光效果?

java - 上传到imgur,已经一周失败了

xml - JAXB 将从 XSD 创建映射

java - 轴描述中的下标

java - Easymock.expect 抛出 IllegalStateException

java - 仅打印数组的元素

c# - xPath 通过 XPathNavigator 对象而不是通过表达式求值来查找祖先