일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java
- list
- 문자열
- 티스토리챌린지
- Python
- 자료형
- jetpack
- disposableeffect
- 백준파이썬
- 자바
- Hilt
- filternotnull()
- 리스트
- 파이썬
- compose
- Kotlin
- ContentProvider
- 프로그래머스
- 백준
- Dependency
- composelifecycle
- 배열
- Provider
- 오블완
- 자바리스트정렬
- 파이썬문법
- nullpointerexception방지
- programmers
- android
- 자바set
Archives
- Today
- Total
study gomi
[Android] 뒤로가기 막기 (stop + preventing backspace) kotlin 본문
728x90
반응형
(공통)
MainActivity에 추가
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 기존 코드들...
// 뒤로가기 버튼을 무시하는 코드
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// 아무 동작도 하지 않음으로써 뒤로가기 기능을 막음
}
})
}
(jetpack compose)
1. MainActivity에서 시스템 차원의 제어
: onBackPressedDispatcher를 사용하여 뒤로가기 버튼을 제어
( MainActivity에 추가 → Compose 기반 UI에서도 뒤로가기 막아짐)
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
// Compose UI 코드
MyApp()
// 뒤로가기 버튼을 무시하는 코드
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// 뒤로가기 버튼 동작을 막음
}
})
}
}
}
2. Compose 자체에서 제공하는 BackHandler 사용
: Jetpack Compose에서 뒤로가기 버튼의 동작을 제어하기 위한 함수
(뒤로가기 버튼을 눌렀을 때 수행할 동작을 지정하는 Composable 함수로 특정 Composable 범위 내에서 뒤로가기 버튼을 제어할 수 있고 사용이 매우 간단함.)
BackHandler를 활용하여 뒤로가기 막기
@Composable
fun DisableBackPress() {
// BackHandler의 enabled를 항상 true로 설정하여 뒤로가기 버튼을 완전히 막음
BackHandler(enabled = true) {
// 아무것도 하지 않음
}
}
추가) BackHandler 기본 사용 - 특정 동작
import androidx.activity.compose.BackHandler
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.window.Dialog
@Composable
fun MyComposable() {
var showDialog by remember { mutableStateOf(false) }
// BackHandler로 뒤로가기 버튼 제어
BackHandler(enabled = showDialog) {
// 뒤로가기 버튼을 눌렀을 때 수행할 동작
showDialog = false // 다이얼로그를 닫는 동작
}
Button(onClick = { showDialog = true }) {
Text(text = "Show Dialog")
}
if (showDialog) {
Dialog(onDismissRequest = { showDialog = false }) {
Surface {
Text("Dialog is open! Press back to close.")
}
}
}
}
@Preview
@Composable
fun PreviewMyComposable() {
MyComposable()
}
둘 중 어떤 것?
Compose 자체에서는 BackHandler라는 함수가 제공되지만 MainActivity에서 시스템 차원의 제어를 할 때는 여전히 onBackPressedDispatcher를 사용하는 방식이 적합. 왜냐하면 BackHandler는 Composable 내부에서만 동작하므로 Activity 전체에서 뒤로가기를 차단하는 데는 적합하지 않음.
특정 composable 범위에서만 뒤로가기 막을 때는 BackHandler가 적합.
728x90
반응형
'App > Android' 카테고리의 다른 글
[Android/Kotlin] text를 표시하는 floating button (jetpack compose) + button 아래에 하얀색 공백이 보이는 문제 (0) | 2024.10.23 |
---|---|
[Android/Kotlin] expandable + moveable/draggable Floating button (jetpack compose) (3) | 2024.10.23 |
[Android/Kotlin] suspend fun, let vs apply (1) | 2024.10.18 |
[Compose] longclick + longclick 안 될 때 (0) | 2024.10.14 |
[Compose] 연속 클릭 동작 composable (1) | 2024.10.14 |