내배캠 최종 프로젝트를 진행하면서 여행을 다녀온 곳에 저장된 사진을 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
}
private fun calColumns(columnWidthDp: Int): Int {
val displayWidth = getDisplayWidth()
val numColumns = displayWidth / columnWidthDp
return if (numColumns <= 1) 2 else numColumns
}
변수 displayWidth에 구한 넓이를 넣어주고 (단말의 넓이 / 지정한 넓이)를 해주어 알맞는 gridlayout의 수를 구해 return을 해주었다.
private fun setupRecyclerView(recyclerView: RecyclerView) {
val columnWidthDp = 400
val layoutManager = GridLayoutManager(requireContext(), calColumns(columnWidthDp))
recyclerView.layoutManager = layoutManager
}
변수 columnWidthDp에 원하는 넓이의 값을 주고 계산해서 단말의 알맞는 열의 개수를 구하는 것을 구현하였다.