일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- aab
- 개발
- MemoList
- IOS
- CalendarView
- SWIFT
- ayncAfter
- ViewModel
- SplashFragment
- MotionEvent
- InAppPurchase
- Dropdown
- RxJava
- imagepicker
- 실행지연
- Android
- Alamofire
- 스터디
- DispatchTouchEvent
- viewpager2
- CSS
- retrofit2
- RecyclerView
- progressbar
- Kotlin
- javascript
- dispatchQueue
- UIPickerView
- web
- HTML
- Today
- Total
멜팅비의 개발 공부
[Android-Kotlin] FullScreen DialogFragment 구현하기(Progress Dialog) 본문
[Android-Kotlin] FullScreen DialogFragment 구현하기(Progress Dialog)
멜팅비 2021. 4. 6. 22:51retrofit을 통해 네트워크 통신을 하는 경우 로딩을 구현하는 경우가 종종 있다.
ProgressBar Dialog 같은 경우 Full Screen으로 떠야 하는 경우들이 있는데 Full Screen으로 뜨도록 하기 위해 구글링을 자주 하는 것 같아서 정리도 할겸 포스팅하게 되었다. (지금은 팝업 같은 경우 공통으로 사용하는 경우가 많아서 모듈화해서 사용한다.)
Full Screen Dialog를 만드는데 크게 2가지 방법을 사용하고 있다.
style.xml에 스타일을 정의해서 구현하는 경우
<style name="Theme.App" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="android:dialogTheme">@style/DialogTheme</item>
</style>
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:statusBarColor">@color/white</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
📒android:windowIsFloating
true일 경우 Dialog가 자식요소 만큼만 view size를 가진다.
false일 경우 Dialog가 전체 화면을 사용한다.
📒android:windowBackground
Dialog 배경 색상 지정
📒android:statusBarColor
상태바 색상을 지정 ( Dialog가 뜰 때 상태바 색상이 기존에 앱에서 설정한 색상과 다르게 뜨는 경우가 있는데, 통일하고 싶을 때 설정해준다.)
📒android:backgroundDimEnabled
ture일 경우 Dialog view 바깥쪽이 dim 처리가 된다.(불투명의 어두운 색상)
false일 경우 dim 처리를 하지 않는다.
📒android:windowFullscreen
Dialog의 크기를 화면에 꽉 채우는데 true로 설정할 경우 상단 상태바가 없어지는 풀스크린 모드가 가능하다.
코드에서 구현하는 방법
class ProgressDialog(private val layoutResId: Int) : DialogFragment() {
lateinit var dialogView: View
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
dialogView = inflater.inflate(layoutResId, container, false)
return dialogView
}
override fun onResume() {
super.onResume()
// full Screen code
dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
}
📒window.setLayout : Dialog View를 MATCH_PARENT 값을 주어 화면에 꽉차도록 한다.
📒window.setBackgroundDrawable : Dialog 배경색 지정
📒window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) : dim 제거
주로 특정 Dialog만 Full Screen 모드로 적용하고 싶을 때 코드로 구현해서 사용하고 있다.
ProgressBar Dialog Class를 구현하고 로딩이 필요한 곳에서 show()를 통해 호출하고 있다.
private val progressDialog: ProgressDialog by lazy { ProgressDialog(R.layout.dialog_progress) }
if (!progressDialog.isAdded) {
progressDialog.show(requireActivity().supportFragmentManager, null)
}
if (progressDialog.isAdded) {
progressDialog.dismiss()
}
'개발 공부 > [Android 개발]' 카테고리의 다른 글
[Android/Kotlin] retrofit2 사용 시 Response가 XML인 경우 Convert 하는 방법 (0) | 2021.09.09 |
---|---|
[Android] RxJava2 관련 스터디 (0) | 2021.08.10 |
[Android-Kotlin] 코틀린 Collection 함수 (0) | 2021.04.03 |
[Android/Kotlin] 안드로이드 BottomSheetDialogFragment 구현하기 (2) | 2021.03.08 |
[Android] 안드로이드 android.view.WindowManager$BadTokenException: Unable to add window 에러 해결방법 (0) | 2021.03.02 |