안드로이드에서 다이얼로그를 만들고자 이전 자바에서 하던 방식 그대로 Dialog 클래스를 상속받으려고 했으나, 일반적으로 DialogFragment가 더 많이 사용되는 듯 하여 해당 방식을 사용하기로 하였다.
그러나 한 가지 문제에 봉착했는데, 다이얼로그의 크기가 원하는 비율로 표시되지 않는다는 점이었다.
그래서 파라미터로 context를 받고, 해당 context의 windowManager를 접근하여
기기의 너비 및 높이를 구했다.
val windowManager = mContext.getSystemService(Context.WINDOW_SERVICE) as WindowManager val display = windowManager.defaultDisplay val size = Point() display.getSize(size) val params: ViewGroup.LayoutParams? = dialog?.window?.attributes val deviceWidth = size.x val deviceHeight = size.y
그렇게 구한 높이에 비율을 곱하여 적용하였다.
params?.width = (deviceWidth * 0.8).toInt() params?.height = (deviceHeight * 0.3).toInt() dialog?.window?.attributes = params as WindowManager.LayoutParams
그렇게 다이얼로그 크기가 그대로 반영되는 줄 알았으나,
실제로는 이런 내용을 onResume시 실행해줘야 한다고 한다.
override fun onResume() { super.onResume() resizeDialog() } fun resizeDialog() { val windowManager = mContext.getSystemService(Context.WINDOW_SERVICE) as WindowManager val display = windowManager.defaultDisplay val size = Point() display.getSize(size) val params: ViewGroup.LayoutParams? = dialog?.window?.attributes val deviceWidth = size.x val deviceHeight = size.y params?.width = (deviceWidth * 0.8).toInt() params?.height = (deviceHeight * 0.3).toInt() dialog?.window?.attributes = params as WindowManager.LayoutParams }
위와 같은 방식으로 적용하니 다이얼로그가 이상적으로 적용되었으나,다이얼로그의 테두리가 라운딩 처리가 되지 않는 문제가 발생하여 다음 코드를 삽입하여 해결되었다.
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
참조
Uploaded by Notion2Tistory v1.1.0