dev/aos
[AOS] 액티비티 뒤로가기(onBackPressed: Deprecated)
캄춰
2023. 11. 14. 10:52
728x90
반응형
뒤로가기를 눌렀을 때 호출되는 onBackPressed함수가 API33부터 Deprecated되었다
액티비티가 꺼지면서 애니메이션을 적용하려고 하였고, 정리가 필요하였다.
2023.11.14 - [dev/aos] - [AOS] 액티비티 애니메이션(Activity Animation)
[AOS] 액티비티 애니메이션(Activity Animation)
Activity를 띄우면서 애니메이션 동작이 필요하게 되어서 정리하게 되었다 액티비티를 띄울 때 사용되는 애니메이션 함수는 : overridePendingTransition 이라는 함수이며, 현재 API34 부터는 Deprecated되어
cavedwellers.co.kr
이전 액티비티 애니메이션을 띄우는 것이 아닌 이제 종료시키는 동작을 할 것이다.
먼저, API33이상부터 적용할 onBackPressedCallback 구현
(참고로 onBackPressedCallback은 대응하려고 만들어진 것이 아닌 원래 있었던 콜백 함수)
: finish는 뒤로가기 동작을 하기 위함
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
private val onBackPressedCallback = object: OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
NLog.d("onBackPressedCallback..")
finish()
}
}
[콜백 인스턴스 등록]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
NLog.d("onCreate..")
setContentView(R.layout.activity_sub)
...
// onBackPressed
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
}
애니메이션 동작은 'translate'로 이동을 시키는 동작
[좌 → 우] 로 액티비티가 종료되면서 동작
[resources/anim/translate_none]
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800">
<translate
android:fromXDelta="0%"
android:toXDelta="0%" />
</set>
[resources/anim/translate_right_out]
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800">
<translate
android:fromXDelta="0%"
android:toXDelta="100%" />
</set>
보통 onBackPressed에 overridePendingTransition을 하지만,
모든 버전에서 유연하게 동작시키기 위해서 'finish'함수를 재정의 하였다.
'뒤로가기' 버튼 UI클릭시 로그
onCreate..
finish..
onBackPressed..
onBackPressed 함수
override fun onBackPressed() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
super.onBackPressed()
NLog.d("onBackPressed..")
}
}
finish함수
override fun finish() {
super.finish()
NLog.d("finish..")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
overrideActivityTransition(Activity.OVERRIDE_TRANSITION_CLOSE, R.anim.translate_none, R.anim.translate_right_out)
} else {
overridePendingTransition(R.anim.translate_none, R.anim.translate_right_out)
}
}
728x90
반응형