RecyclerView兩列分別放在左右兩邊,中間分隔
阿新 • • 發佈:2019-01-02
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,內容挺多的,全部用的小機器人,醜。