在Android的RecyclerView中编程设置项目的重力

4
我正在使用RecyclerView Android制作带有左/右消息框的聊天界面。我想将项目的重力设置为RecyclerView中的项。通常情况下,我会将itemView转换为LinearLayout,然后为其设置ParamLayout重力。但是,在RecyclerView中,这样做似乎不正确。它将返回RecyclerView.LayoutParams。原因是:

LayoutParams是RecyclerView子项的子类。建议自定义布局管理器创建自己的LayoutParams子类来存储与布局有关的每个子视图所需的任何其他元数据。

我找不到用RecyclerView.LayoutParams设置重力的方法 :| 无论如何,能否有人找到在RecyclerView中设置item重力的方法?请给我建议。
-----------发布解决方案------------------
//1. RecyclerView的子项
      <LinearLayout
android:id="@+id/id_grandparent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:divider="@android:color/transparent"
android:gravity="left"
android:orientation="vertical">
<LinearLayout
    android:id="@+id/id_llparent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_customer_feedback_left"
    android:gravity="left"
    android:orientation="vertical">
</LinearLayout>

//2. OnBindView()

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        params = setLayoutParamsForParent(params, item.isPosition());
        holder.llParentLayout.setLayoutParams(params); //corresponding to id_llparent ID

//3.

     private LinearLayout.LayoutParams setLayoutParamsForParent(LinearLayout.LayoutParams params, boolean position) {
        params.gravity = position ? Gravity.RIGHT : Gravity.LEFT;
         return params;
    }
2个回答

7
问题解决了。 简单来说,我使用了。
 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

替代

RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.llGrandParent.getLayoutParams();

然后正常设置LinearLayout Params的重力。

你能展示一下你代码的这部分吗?因为我已经尝试过将LinearLayout和RelativeLayout作为RecyclerView的子项,但是你的代码对我来说并没有起作用。或者你可以回答我的问题吗?我真的卡在这里了:https://dev59.com/eIzda4cB1Zd3GeqPmnIo#31106462 - Loolooii
谢谢 Pham,我会尝试并告诉你它是否对我有效。 - Loolooii

2
我通过设置项目布局中视图的重力来实现此操作。
LinearLayout.LayoutParams paramsMsg = new LinearLayout.
            LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
            android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
    if (position%2 == 0){
        holder.bodyView.setBackgroundResource(R.drawable.outgoing_messages);
        paramsMsg.gravity = Gravity.END;
    } else {
        holder.bodyView.setBackgroundResource(R.drawable.incoming_messages);
        holder.bodyView.setTextColor(0xf08888);
        paramsMsg.gravity = Gravity.START;
    }
    holder.bodyView.setLayoutParams(paramsMsg);

bodyView是项布局内部的TextView,项的宽度为“match_parent”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接