2015-04-03 89 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

相關問題