반응형
이번 글에선 기기의 뒤로 가기 버튼을 두 번 눌러서 화면을 종료하는 방법에 대해서 알아보도록 하자.
OnBackPressed
여기서 활용할 함수는 onBackPressed함수인데, 기기의 뒤로가기 버튼을 누르면 호출된다.
private var backPressedTime: Long = 0L
override fun onBackPressed() {
if (System.currentTimeMillis() - backPressedTime <= 2000) {
finish()
} else {
backPressedTime = System.currentTimeMillis()
Toast.makeText(this, "한 번 더 누르면 종료됩니다.", Toast.LENGTH_SHORT).show()
}
}
동작 방식은 onBackPressed 함수가 호출 된 시간을 저장하는 변수를 하나 생성한 후
onBackPressed함수 호출 시 현재 시간과 이전에 함수가 호출 된 시간의 차가 2를 넘지 않으면 화면을 종료하고,
2를 넘으면 backPrssedTime을 업데이트 하고 Toast메시지를 띄워주도록 한다.
OnBackPressedDispatcher
안드로이드 33 Tiramisu버전부터는 위에서 이야기한 onBackPressed함수가 deprecated되었기 때문에
OnBackPressedDispatcher로 대체하여 사용하여야 한다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
private var backPressedTime = 0L
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (System.currentTimeMillis() - backPressedTime <= 2000) {
finish()
} else {
backPressedTime = System.currentTimeMillis()
Toast.makeText(this@MainActivity, "한 번 더 누르면 종료합니다.", Toast.LENGTH_SHORT).show()
}
}
}
}
기본 로직은 위와 동일하기 때문에 onBackPressedDispatcher에 callback만 추가해주면 된다.
반응형
'안드로이드 > 개발관련(Kotlin)' 카테고리의 다른 글
안드로이드 RecyclerView 아이템 줌하기(SanpHelper, ScrollListener) (0) | 2023.03.31 |
---|---|
안드로이드 Circle Progress (로딩 애니메이션) 만들기 (0) | 2023.03.30 |
안드로이드 ViewPager2 + TabLayout를 사용한 스와이프 메뉴 (0) | 2023.03.28 |
안드로이드 No matching variant of com.android.tools.build:gradle:* was found 오류 해결법 (0) | 2023.03.28 |
retrofit을 사용한 안드로이드와 Node.js간 통신 (0) | 2023.02.28 |