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,内容挺多的,全部用的小机器人,丑。