안드로이드

안드로이드 RecyclerView Grid 형태로 쓸 때 아이템들 가로세로 크기 동일하게 만드는 방법. ViewTreeObserver.OnGlobalLayoutListener(), getTreeViewObserver()

알통몬_ 2018. 12. 3. 08:55
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


안드로이드에서 RecyclerView는 자주사용되는 컨테이너인데요.


1 to 50 게임같은 가로세로 높이가 같은 아이템들이 있는 RecyclerView를

만들 때 RecyclerView의 가로세로 높이를 구해서  1/n을 하면

아이템들의 높이를 맞출 수 있는데요.

여기서 동적으로 RecyclerView의 가로세로 높이를 구하는 코드를

소개하려 합니다.

1
2
3
4
5
6
7
8
9
10
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int width = recyclerView.getHeight()  / 5;
                int height = recyclerView.getHeight()  / 5;
                inverseStepAdapter.setLength(width, height);
                inverseStepAdapter.notifyDataSetChanged();
            constraintLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
cs


adapter에 setLength 라는 메소드를 만들었는데요.

그리고 adapter에 item들의 width, height를 설정해주면 됩니다.

adapter의 필드 

1
    private int width = 0, height = 0;
cs

1
2
3
4
        if (width != && height != 0) {
            binding.stepImgView.getLayoutParams().width = width;
            binding.stepImgView.getLayoutParams().height = height;
        } //onBindViewHolder에 선언
cs

1
2
3
4
5
    public void setLength(int width, int height) {
        this.width = width;
        this.height = height;
    } // 메소드
 
cs


RecyclerView를 사용해보신 분들이라면 쉽게 적용하실 수 있으실거에요.

이상입니다. 감사합니다.


반응형