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
반응형