[kotlin] 화면 크기의 맞는 Gridlayout 열 구하기

박재원·2024년 3월 19일
1

TIL

목록 보기
47/50
post-thumbnail

내배캠 최종 프로젝트를 진행하면서 여행을 다녀온 곳에 저장된 사진을 gridlayout으로 출력하는 것을 구현하게 되었다.

val layoutManager = GridLayoutManager(requireContext(), 2)
	recyclerView.layoutManager = layoutManager

처음에는 이런식으로 열을 2로 고정을 하여 gridlayout을 구현하고 있었다. 이러한 방식으로 구현을 하다보니 다른 애뮬레이터에서 테스트를 해봤을 때 간혹 좌우 폭이 넓어 빈 공간이 생겨 보기 좋지 않은 결과물이 되었다. 그래서 애뮬레이터 마다 좌우 넓이 값을 찾고 그에 맞는 grid item 수를 구현해 보려고 한다.

넓이 구하기

private fun getDisplayWidth(): Int {
	val displayMetrics = DisplayMetrics()
	requireActivity().windowManager.defaultDisplay.getMetrics(displayMetrics)
	return displayMetrics.widthPixels
}
  • 애뮬레이터의 좌우 넓이를 구하기 위해 변수 displayMetrics에 DisplayMetrics()함수를 사용했다.
  • return 값으로 단말의 좌우 폭의 값으로 주었다.

개수 계산하기

private fun calColumns(columnWidthDp: Int): Int {
        val displayWidth = getDisplayWidth()
        val numColumns = displayWidth / columnWidthDp
        return if (numColumns <= 1) 2 else numColumns
    }

변수 displayWidth에 구한 넓이를 넣어주고 (단말의 넓이 / 지정한 넓이)를 해주어 알맞는 gridlayout의 수를 구해 return을 해주었다.

Gridlayout 적용하기

private fun setupRecyclerView(recyclerView: RecyclerView) {
        val columnWidthDp = 400
        val layoutManager = GridLayoutManager(requireContext(), calColumns(columnWidthDp))
        recyclerView.layoutManager = layoutManager
    }

변수 columnWidthDp에 원하는 넓이의 값을 주고 계산해서 단말의 알맞는 열의 개수를 구하는 것을 구현하였다.

0개의 댓글