Вы можете добиться этого, динамически изменяя поля root элемента списка, это необходимо сделать в адаптере onBindViewHolder()
function
GridLayoutManager.LayoutParams params = (GridLayoutManager.LayoutParams) holder.card.getLayoutParams();
if (position % 2 == 0) {
params.setMargins(dpTopixel(20), dpTopixel(10), dpTopixel(10), dpTopixel(5));
} else {
params.setMargins(dpTopixel(10), dpTopixel(10), dpTopixel(20), dpTopixel(5));
}
holder.card.setLayoutParams(params);
Здесь есть функция для преобразования пикселя в dp
private int dpTopixel(int dp) {
float dip = (float) dp;
Resources r = context.getResources();
float px = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
r.getDisplayMetrics()
);
return (int) px;
}
Если вы используете один и тот же адаптер для обоих экранов, вы можете отправить флаг с конструктором адаптера, чтобы заблокировать этот код