기본 콘텐츠로 건너뛰기

안드로이드 앱 만들기 : Jetpack compose back press handling 에대한 이야기


원본출처: 티스토리 바로가기

Jetpack Compose는 개발자가 아름답고 반응이 빠르고 효율적인 사용자 인터페이스를 쉽게 빌드할 수 있는 최신 Android UI 도구 키트입니다. Android 개발의 일반적인 작업 중 하나는 뒤로 버튼 누름 이벤트를 처리하는 것입니다.

 

이 블로그 게시물에서는 Jetpack Compose에서 뒤로 버튼 누르기 이벤트를 처리하는 방법을 살펴보겠습니다.

 

Android에서 뒤로 버튼은 거의 모든 Android 기기에 있는 하드웨어 버튼입니다.

 

뒤로 버튼은 앱의 이전 화면이나 활동으로 돌아가는 데 사용됩니다. 뒤로 버튼 누르기 이벤트는 기본적으로 Android 시스템에서 처리하지만 때때로 이 동작을 재정의하고 뒤로 버튼 누르기 이벤트를 직접 처리하려고 합니다.

 

Jetpack Compose에서는 속성을 사용하여 뒤로 버튼 누름 이벤트를 처리할 수 있습니다 onBackPressedDispatcher. 이 onBackPressedDispatcher속성은 뒤로 버튼 누름 이벤트를 처리하기 위해 개체를 OnBackPressedDispatcherOwner등록할 수 있는 인터페이스입니다

 

OnBackPressedCallback.

onBackPressedDispatcher속성을 사용하여 Jetpack Compose에서 뒤로 버튼 누름 이벤트를 처리하는 방법을 살펴보겠습니다 .

 

import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedDispatcherOwner import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext  @Composable fun BackPressHandler(     enabled: Boolean = true,     onBackPressed: () -> Unit ) {     val backPressedDispatcher = (LocalContext.current as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher     val callback = remember {         object : OnBackPressedCallback(enabled) {             override fun handleOnBackPressed() {                 onBackPressed()             }         }     }      DisposableEffect(callback) {         backPressedDispatcher?.addCallback(callback)         onDispose {             callback.remove()         }     } }

 

위의 코드에서 이름이 구성 가능한 함수를 만들었습니다 BackPressHandler. 이 함수는 두 개의 매개변수를 사용합니다.

  • enabled: 뒤로 버튼 누름 이벤트 처리 여부를 지정하는 부울 값입니다. 기본적으로 로 설정되어 있습니다 true.
  • onBackPressed: 뒤로 버튼을 눌렀을 때 호출되는 람다 함수입니다.

함수에서 먼저 속성 에서 개체를 BackPressHandler가져옵니다 . 그런 다음 함수를 사용하여 개체를 만듭니다 . 객체 는 뒤로 버튼을 누를 때 호출되는 함수를 재정의합니다 . 함수 에서 뒤로 버튼 누름 이벤트를 처리하기 위해 람다 함수를 호출합니다

 

. onBackPressedDispatcherLocalContext.currentOnBackPressedCallbac krememberOnBackPressedCallbackhandleOnBackPressedhandleOnBackPr essedonBackPressed

그런 다음 함수를 사용하여 개체에 개체를 DisposableEffect등록 및 등록 취소합니다 . 개체가 생성 되면 메서드를 사용하여 개체 에 추가합니다. 컴포저블이 삭제되면 메서드를 사용하여 객체에서 객체를 제거합니다

 

. OnBackPressedCallbackonBackPressedDispatchercallbackonBackPress edDispatcheraddCallbackBackPressHandlercallbackonBackPressedDis patcherremove

컴포저블을 사용하려면 BackPressHandlerJetpack Compose 계층 구조에서 간단히 호출하고 onBackPressed람다 함수를 전달하여 뒤로 버튼 누르기 이벤트를 처리하면 됩니다.

 

@Composable fun MyScreen() {     BackPressHandler(onBackPressed = { /* Handle back button press event */ }) {         // Screen content     } }

MyScreen. 은  BackPressHandler위의 코드에서는 컴포저블 내부에서 컴포저블을 호출했습니다 

 

화면의 내용은 BackPressHandler onBackPressed뒤로 버튼 누름 이벤트를 처리하기 위해 람다 함수를 전달했습니다. 

 


이렇게 오늘도 글 하나를 open GPT을 활용해서 작성해 보았습니다. 직역을 하고 있어서 말의 앞 뒤가  좀 애매한 구석이 없지 않지만, 나름 기술적인 부분에 대해서는 구글 검색을 하는 것만큼이나 기술해 주고 있습니다. 

 

이제 이 코드를 실전에 적용해 보도록 하겠습니다.    도전해 볼 필요가 있는 것 같습니다. 

 

아래는 참고 글  하나 찾아보았습니다.

 

https://medium.com/better-programming/back-press-handling-in-android-jetpack-compose-42d9ed402d40

 

Back Press Handling in Android Jetpack Compose

Create a handler function to customize your back press events

betterprogramming.pub

 

쿠팡링크 쿠팡와우 로켓프래쉬 로켓패션
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글

이 블로그의 인기 게시물

개인정보처리방침 안내

 billcoreaTech('https://billcoreatech.blogspot.com/'이하 'https://billcoreatech.blogspot')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다. ○ 이 개인정보처리방침은 2021년 8월 26부터 적용됩니다. 제1조(개인정보의 처리 목적) billcoreaTech('https://billcoreatech.blogspot.com/'이하 'https://billcoreatech.blogspot')은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다. 1. 서비스 제공 맞춤서비스 제공을 목적으로 개인정보를 처리합니다. 제2조(개인정보의 처리 및 보유 기간) ① billcoreaTech은(는) 법령에 따른 개인정보 보유·이용기간 또는 정보주체로부터 개인정보를 수집 시에 동의받은 개인정보 보유·이용기간 내에서 개인정보를 처리·보유합니다. ② 각각의 개인정보 처리 및 보유 기간은 다음과 같습니다. 1.<서비스 제공> <서비스 제공>와 관련한 개인정보는 수집.이용에 관한 동의일로부터<사용자의 설정시간>까지 위 이용목적을 위하여 보유.이용됩니다. 보유근거 : 앱의 기본기능 활용에 필요한 위치정보 제3조(개인정보의 제3자 제공) ① billcoreaTech은(는) 개인정보를 제1조(개인정보의 처리 목적)에서 명시한 범위 내에서만 처리하며, 정보주체의 동의, 법률의 특별한 규정 등 「개인정보 보호법」 제17조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다. ② billcoreaTech

안드로이드 앱 만들기 : jetpack compose URL 에서 image 받아와서 보여 주기 (feat coil)

원본출처: 티스토리 바로가기 샘플 이미지 오늘은 앱을 만들면서 이미지를 보여 주어야 하는 경우 중에  URL에서 이미지를 가져와 보는 것에 대해서 기술해 보겠습니다.  URL에서 image를 가져온다는 것은 서버에 저장된 image 일수도 있고, SNS profile의 image 정보일수도 있을 것입니다.    구글에서 찾아보면 다른 것들도 많이 있기는 합니다.  그 중에서 coil 라이브러리를 이용해서 한번 만들어 보도록 하겠습니다.    gradle 설정 그래들 설정은 아래 한 줄입니다. 현재 시점에서 최신 버전인 것으로 보입니다.  이 글을 보시는 시점에 최신 버전이 아니라면 아마도 android studio는 추천을 해 줍니다. // image load from url implementation("io.coil-kt:coil-compose:2.2.2")   manaifest  설정 당연한 이야기 겠지만, url에서 이미지를 받아 와야 하기 때문에 권한 설정을 해야 합니다. 또한 인터넷에서 자료를 받아 오는 것은 지연이 발생할 수 있기 때문에 application에서도 다음 문구의 추가가 필요합니다.  <uses-permission android:name="android.permission.INTERNET" /> <application ... android:networkSecurityConfig="@xml/network_config" ... /> 이 설정을 하게 되면 xml 파일을 하나 추가해 주면 됩니다.  network_config.xml 이라는 이름으로 말입니다.  <?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextT