Before 2022/Android

Dialog Full Size 및 화면 하단에 위치 시키기

Eljoe 2019. 6. 17. 11:28

styles.xml에 아래와 같은 값을 넣는다.

<style name="CustomFullDialog">
	<item name="android:windowFullscreen">true</item>
	<item name="android:windowIsFloating">true</item>
</style>

android:windowFullscreen -> dialog의 크기를 화면에 꽉 채우게한다.

android:windowIsFloating -> 부모 뷰의 크기 및 위치 상관 없이(소프트 키나 타이틀 바 영역도 관계 없이) 부모 뷰 위에 띄우는걸 허용하는 속성

 

이후 dialog의 width는 match_parent 속성을 부여하고 height는 wrap_content나 적당한 값을 부여한 후

아래와 같은 코드를 해당 dialog에 붙여넣는다.

class TestFragment : DialogFragment() {
    private var type: String? = null

    companion object {
        fun newInstance(type: String): DialogFragment {
            val fragment = TestFragment()
            val args = Bundle()
            args.putString("type", type)
            fragment.arguments = args
            return fragment
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 스타일 적용
        setStyle(STYLE_NORMAL, R.style.CustomFullDialog)
        type = arguments?.getString("type")
    }

    override fun onStart() {
        super.onStart()
        
        // 레이아웃 크기 및 위치 조정
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.WRAP_CONTENT
		
        dialog?.window?.setLayout(width, height)
        dialog?.window?.setGravity(Gravity.BOTTOM)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.d_fragment_direct, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        // 뷰가 그려진 이후의 로직
    }
}