Android RecyclerView问题

时间:2016-06-07 07:50:33

标签: java android android-recyclerview

我正在app中创建一个信使功能,并希望根据持有者传递的某些值来更改布局重力(必须是START或END)。一切都很好,除了重力。所有持有人都在START设置。有没有解决方案?

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Message message = mMessageList.get(position);
    if(message.getSender().equals("System")){
        holder.content.setBackgroundResource(R.drawable.message_bubble_out);
        holder.content.setTextColor(Color.parseColor("#000000"));
        holder.messageLayout.setGravity(Gravity.END);
    }
    holder.content.setText(message.getContent());
}

消息布局XML:

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

        <TextView
            android:id="@+id/message_content"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:background="@drawable/message_bubble_out"
            android:text="Hi, rangertS!"
            android:textColor="#FFFFFF" />

</LinearLayout>

messageLayout定义:

messageLayout = (LinearLayout) view.findViewById(R.id.message_wrapper);

1 个答案:

答案 0 :(得分:1)

好的,既然您已经为我们提供了详尽的解释,我想我知道答案。

似乎重力不应该归咎于此......正如我所说,你的约束逻辑是重点。

这里真正的罪魁祸首是你布局消息布局的方式。我们来看看下面指出的几行:

<LinearLayout
    android:id="@+id/message_wrapper"
    android:layout_width="wrap_content" <--- Use match_parent instead
    android:layout_height="wrap_content"
    android:layout_gravity="end"
    xmlns:android="http://schemas.android.com/apk/res/android">

        <TextView
            android:id="@+id/message_content"
            android:layout_width="250dp" <--- Use wrap_content instead
            android:layout_height="wrap_content"
            android:background="@drawable/message_bubble_out"
            android:text="Hi, rangertS!"
            android:textColor="#FFFFFF" />

</LinearLayout>

您可以在我上面给出的带注释的代码段中看到问题的两个根本原因。让我们再详细说明一下:

  1. 您正在宣布LinearLayout宽度为wrap_content,这意味着重力永远不会在此发挥作用。为什么?好吧,因为布局总是与其内容完全相同!尽量让LinearLayout宽度与其父级一样宽,然后您就会看到重力的影响。

  2. 你的TextView的250dp,至少来自我的POV,有点太大了。有一点理由让TextView大于它所包含的实际文本。请尝试在此处使用wrap_content。

  3. 希望这有帮助! :)