-
[Android]다이얼로그 크기 조정 및 테두리 둥글게 만들기Andorid 2022. 3. 29. 22:25
안드로이드에서 다이얼로그를 만들고자 이전 자바에서 하던 방식 그대로 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))
참조
[안드로이드] 커스텀 다이얼로그(Custom Dialog) 둥글게 모서리 디자인하기 (feat. 투명 버튼) 초간단 예제
'Andorid' 카테고리의 다른 글
[Android] 위에서 아래로 꺼지는 애니메이션 만들기 (0) 2022.03.29 [Android Retrofit2] java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 오류 해결 (0) 2022.03.29 java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 오류 해결 (0) 2022.02.06 다이얼로그 크기 조정 및 테두리 둥글게 만들기 (0) 2022.02.06 [Android] 안드로이드 하단 슬라이딩 레이아웃 (0) 2020.11.22