以编程方式为RecycerView Android中的项目设置重力

我正在使用RecyclerView Android与左/右消息框进行聊天。 我想将重力设置为RecyclerView的项目。 通常情况下,我将itemView投射到LinearLayout,然后为它设置ParamLayout重力。 但是如果使用RecyclerView,将它转换为LinearLayout似乎是不对的。 它会返回RecyclerView.LayoutParams。 因为:

RecyclerView的子项的LayoutParams子类。 鼓励自定义布局管理器创建自己的此LayoutParams类的子类,以存储有关布局的任何其他必需的每子视图元数据。

我找不到用RecyclerView.LayoutParams设置引力的方法:| 无论如何,任何人都可以在RecyclerView中找到重力项目的方式吗? 请给我建议。

----------- POST SOLUTION ------------------
// 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;
    }

我通过在项目布局中的视图上设置重力来做到这一点。

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”。


问题解决了。 简单地说,我使用

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

代替

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

然后通常为LinearLayout参数设置重力。

链接地址: http://www.djcxy.com/p/93299.html

上一篇: Set gravity programmatically for item in RecycerView Android

下一篇: Onlayout method on custom layout extending LinearLayout