2015-04-03 99 views
2

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

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; 
    } 
+0

问题解决。 – 2015-04-03 04:44:51

回答

-1

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

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

6

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

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

代替

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

,然后设置的LinearLayout PARAMS重力正常。

+0

你可以显示你的部分代码吗?因为我已经尝试将LinearLayout和RelativeLayout作为RecyclerView的子代,并且您的代码对我无效。或者,也许你可以回答我的问题?我真的坚持在这里:http://stackoverflow.com/questions/31101577/is-it-possible-to-set-gravity-programmatically-for-recyclerview-children-in-andr/31106462#31106462 – Loolooii 2015-06-29 19:59:34

+0

谢谢范,我会尽力让你知道它是否适合我。 – Loolooii 2015-07-01 09:58:57

相关问题