BaseDialogFragment를 만들면서 DialogFragment에 대해서 이렇게나 몰랐다 내가~...

Hue·2024년 7월 25일

Dialog vs DialogFragment

stackOverflow에 게시된 DialogFragment가 Dialog보다 나은 점에 대한 답변이다.
DialogFragment는 말 그대로 Fragment로써의 기능을 가지므로 lifecycle에 대한 콜백이 존재한다. Activity가 사라질때 window leaks에 대한 걱정 없이 프래그먼트로써 사용할 수 있다.

또 다른 답변의 말을 인용하자면

Are they so much different? A DialogFragment is pretty similar to a Dialog, it's just wrapped inside a fragment.

DialogFragment도 결국 다이얼로그다. DialogFragment는 FragmentTransaction을 수동으로 만드는 대신 show() 메소드를 사용하여 표시한다. 안드로이드 개발 가이드에서도 Dialog 가이드를 참조하라고 한다.



셋메시지, 셋타이틀, 셋P/N버튼 外

dialog.window

시각적으로 보여지는 표면을 가지는 최상위 화면, 추상클래스를 일컫는다.
안드로이드에서 UI를 렌더링하기 위해 Window - Surface - Canvas - View (크기순) 와 같은 개념이 있다.

여기서부터 이해한 내용을 바탕으로 정리하였으므로 틀릴 수 있습니다

그냥.. 고먐미가 생각났다. 사실 올바르게 비유한 것인지는 모르겠지만...

  • Window : 상호작용하는 화면, 액티비티가 보여질 수 있다. statusBar 영역, navigationBar 영역, 남은 중앙 영역 모두 각각의 윈도우
  • Surface : 직접 그릴 수 있는 화면, 이 계층에서 실제 화면에 나타나는 그래픽이 랜더링된다. (Canvas : Surface 혹은 Bitmap에 그림을 그릴 수 있는 클래스)
  • View : UI 요소로써 Window에 blended 결과, 화면에 표시된(그려진) 그래픽

setDimAmount

다이얼로그 윈도우 외부 배경의 어두운 정도를 설정.
매개변수 amount: Float : 0(배경 없음) ~ 1(가장 어두움)

setCanceledOnTouchOutside

다이얼로그 윈도우 외부를 터치했을 때, 다이얼로그를 cancel()할 지에 대한 여부.
매개변수 cancel: Boolean : true(외부 터치 시 다이얼로그 종료), false(종료하지 않음)

setCancelable()

뒤로가기 키를 눌렀을 때 다이얼로그를 cancel()할 지에 대한 여부.
매개변수 flag: Boolean : true(뒤로가기 터치 시 다이얼로그 종료), false(종료하지 않음)


곁다리

  • decorView : Window의 배경 drawable을 실제로 가지고 있는 view, 앱의 타이틀바, 상태바, 컨텐츠 영역을 모두 포함한다.
  • layoutParams : 레이아웃 파라미터, 부모한테 어떻게 배치되고 싶은지 말할 때 사용되는 뷰
    xml에서 layout_으로 시작하는 속성들(ex. android:layout_margin="...") -> LayoutParams 클래스의 필드값과 매핑
  • flag : 액티비티 교체를 하면서 task(Android stck)에 액티비티가 쌓임 -> 중복 및 흐름에 문제가 생김 -> 이 문제를 통제하고자 flag 사용(ex. FLAG_ACTIVITY_CLEAR_TOP 깃발 꽂아서 Intent로 화면이동시 이동한 화면이 최상위가 되면서 위로 있던 액티비티 모두 부숴버림)
    화면이동 말고도 WindowManager를 통해 Activity의 제약사항을 통제할 수 있다. (ex. WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 윈도우에 포커스 가지 않도록 함)
    즉, startActivity()를 호출할때, 새로운 액티비티에 대해 정의하는 것

근데 왜 플래그일까 해서 찾아봤다
사망 플래그가 plug가 아니라 flag였다 심지어 프로그래밍 언어에서 유래됐다

  • addFlags() vs setFlags()

    setFlag() : 오래된 flag 전체를 대체 -> replacing
    addFlag() : 새 flag를 덧붙임 -> appending


DialogFragment advantages over AlertDialog
stackOverlow - What is an Android window
[안드로이드]윈도우(Window)
안드로이드에서 뷰가 그려지는 과정
[Anrdroid] SurfaceView 기본 + 심화
Android Window
stackOverflow - What is decor view?
[안드로이드] LayoutParams(레이아웃 파라미터) 개념과 구조/종류
[Android] Flag란? Intent Flag 사용
WindowManager.LayoutParams()
1. 이러면 꼭 죽더라! 플래그란 무엇인가?
Intent :: setFlags() VS addFlags()
stackOverflow - Android:What is difference between setFlags and addFlags for intent

+ GPT (대신 써 준 글 없이 검색에만 활용하였음)

0개의 댓글