안드로이드에는 커스텀한 다이얼로그를 사용하고 싶어 DialogFragment를 상속받는 새로운 다이얼로그를 만들곤 합니다. 여기서 주의할 점은 해당 다이얼로그의 크기를 제대로 설정을 해주지 않는다면 DialogFragment의 크기때문에 원하는 디자인이 안 나올 수도 있다는 것입니다. 여기서는 2가지 방법으로 크기로 조절할 수 있습니다.
xml에 고정된 값주기
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- 사이즈가 고정된 View -->
<LinearLayout
android:layout_width="300dp"
android:layout_height="200dp"
android:background="#2B353E"
android:gravity="center"
android:orientation="vertical"
android:padding="24dp">
FrameLayout 등 뷰그룹을 사용해 감싸주면 원하는 사이즈의 다이얼로그가 노출됩니다. 그렇지만 이 방법의 경우 모든 안드로이드 폰의 화면이전부 다르기 때문에 상대적으로 줄 수는 없다는 점입니다.
코드에서 조절
//in DialogFragment
onCreate(){
requireContext().dialogFragmentResize(this, 0.9f, 0.8f)
}
private fun Context.dialogFragmentResize(
dialogFragment: DialogFragment,
width: Float,
height: Float,
) {
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
if (Build.VERSION.SDK_INT < 30) {
val display = windowManager.defaultDisplay
val size = Point()
display.getSize(size)
val window = dialogFragment.dialog?.window
val x = (size.x * width).toInt()
val y = (size.y * height).toInt()
window?.setLayout(x, y)
} else {
val rect = windowManager.currentWindowMetrics.bounds
val window = dialogFragment.dialog?.window
val x = (rect.width() * width).toInt()
val y = (rect.height() * height).toInt()
window?.setLayout(x, y)
}
}
이런 식으로 WindowManager를 받아와 다이얼로그의 크기를 조절한다면 기기의 상대적인 크기로 다이얼로그가 나오게 됩니다.
'안드로이드 > 안드로이드' 카테고리의 다른 글
[Android/Kotlin] ViewModel 과 ViewPager (1) | 2023.10.10 |
---|---|
[Android/Kotlin] SharedPreferences (0) | 2023.09.14 |
[Android/Kotlin] 퍼미션(권한)허용 (0) | 2023.09.12 |
[Android/Kotlin] 리사이클러뷰(RecyclerView) 스와이프 이벤트 (0) | 2023.09.11 |
[Android/Kotlin] attachToParent (0) | 2023.09.05 |