Расположение элемента StaggeredGridLayoutManager - PullRequest
0 голосов
/ 06 июля 2018

Я использую список ниже, используя RecyvlerView. Я сделал это, используя StaggeredGridLayoutManager

enter image description here.

ПРИМЕЧАНИЕ: Этот снимок экрана с GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS

Все работает нормально, но проблема в том, как упорядочить элементы, они упорядочивают такие элементы, как:

 | 0 | 1 |
 | 3 | 2 |
 | 4 | 5 |
 | 7 | 6 |

Если вы посмотрите на изображение выше, вы заметите, что 2-й элемент отображается справа, в то время как 4-й элемент идет слева, но мое требование состоит в том, чтобы начинать каждый ряд с правой стороны, т.е. 4-й элемент будет располагаться справа от сетки. Я пробовал и GapStrategy StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS и StaggeredGridLayoutManager.GAP_HANDLING_NONE. Если я использую GAP_HANDLING_NONE, то элементы не отображаются, но функции адаптера вызываются, но вывод Пустой экран. Есть ли какая-либо функция, заставляющая StaggeredGridLayoutManager начать рисование с правой стороны для новой строки?

Я рассчитываю высоту предмета, используя приведенный ниже код:

public static void isSquired(View view, int position) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity) view.getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int height = displayMetrics.heightPixels;
        int width = displayMetrics.widthPixels;
        boolean isSquare = isSquare(position);
        ViewGroup.LayoutParams lp = view.getLayoutParams();
        if (isSquare) {
            lp.width = width / 2;
            lp.height = width / 2;
        }else{
            lp.width = width / 2;
            lp.height = (width / 2)+70;
        }

        view.setLayoutParams(lp);
        view.requestLayout();
    }

    public static boolean isSquare(int position) {
        int mod = position % 4;
        return mod == 1 || mod == 3;
    }

Инициализация RecyclerView:

StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
//manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(manager);
recyclerView.setNestedScrollingEnabled(false);
...