1. 程式人生 > >RecyclerView兩列分別放在左右兩邊,中間分隔

RecyclerView兩列分別放在左右兩邊,中間分隔

RecyclerView實現兩列分別放在左右兩邊,中間分隔
由於要實現購物車功能,效果是如圖:
這裡寫圖片描述
寫到隨便逛逛佈局時遇到問題:item只有中間有分隔,左右與螢幕是沒有間隙的。

隨便逛逛佈局:layout_ramble.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_margin
="10dp" android:layout_height="wrap_content" android:background="@color/colorAccent" android:id="@+id/rl_ramble" >
<ImageView android:id="@+id/iv_ramble" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background
="@drawable/ic_launcher" android:scaleType="fitXY" />
</RelativeLayout>

只放了一張圖片,根部句為RelativeLayout。
解決:利用LayoutParams,在邏輯程式碼中設定。
1.在RecyclerView的Adapter中定義兩個RelativeLayout.LayoutParams,使用者來設定Item兩邊的佈局樣式

private RelativeLayout.LayoutParams mRambleRLLeftParams,mRambleRLRightParams;

2.例項化LayoutParams

mRambleRLLeftParams = new RelativeLayout.LayoutParams(MockData.getScreenWidth(context) /2-10,MockData.getScreenWidth(context) / 2-10);
mRambleRLRightParams = new RelativeLayout.LayoutParams(MockData.getScreenWidth(context) /2-10,MockData.getScreenWidth(context) / 2-10);

上邊MockData.getScreenWidth(context)方法獲取螢幕寬度,RelativeLayout.LayoutParams第一個引數設定控制元件寬度,第二個引數設定控制元件高度。
封裝的獲取螢幕寬高的方法:

 /**
     * 獲取螢幕寬高
     * @param context
     * @return
     */
public static int getScreenWidth(Context context){
        return ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
    }
public static int getScreenHeight(Context context){
        return ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight();
    }

3.設定LayoutParams:根據自己程式碼的邏輯,判斷左右兩邊position

                //設定右邊Item的左margin值為10畫素
                mRambleRLLeftParams.leftMargin = 10;
                //設定左邊Item的右margin值為10畫素
                mRambleRLRightParams.rightMargin = 10;
                //若判斷為左邊item
                if(position%2 == 0){
                    holder.mRambleRL.setLayoutParams(mRambleRLRightParams);
                }else {
                    holder.mRambleRL.setLayoutParams(mRambleRLLeftParams);
                }

效果:
這裡寫圖片描述

遇到的問題:開始想到用一個LayoutParams來做,在程式碼中判斷position,然後設定LayoutParamas是左邊設定margin還是右邊設定margin,執行結果每個item設定的margin都是左或者都是右。我這裡還嵌套了購物車的功能,所以還要理清頭緒。

程式碼包括了實現購物車、隨便逛逛、RecyclerView多佈局巢狀、CheckBox,內容挺多的,全部用的小機器人,醜。