본문 바로가기

안드로이드 코틀린145

[Kotlin][Android] ActivityResultAPI 사용해서 액티비티 간 데이터 주고 받기 안드로이드 개발을 진행하다 보면 단순히 액티비티를 전환하고 끝! 이 아니라 이후 발생한 액티비티에서 작업을 하고 원래 액티비티에 돌아와서 사용하고 싶은 경우가 있습니다. 이럴때 이전까진 startActivityForResult()와 onActivityResult() 함수를 사용해서 처리해 주곤 했습니다. 그렇지만, 이미 onActivityResult는 Deprecated 된 함수입니다. 최근엔 새로운 Activity Result API 사용을 권장하고 있습니다. 다양한 Activity Result API 중 Activity 간의 Result 처리에는 ActivityResultContracts.StartActivityForResult를 사용해야 합니다. 오늘은 간단한 예제를 통해 전환된 액티비티에서 작업한.. 2023. 8. 30.
[Kotlin][Android] View Model에서 안드로이드 문자열 관리하기 안녕하세요. 오늘은 뷰모델에서 문자열(string)을 관리하는 하나의 방법에 대해 알아보겠습니다. viewmodel은 UI 레이어에 대한 state holder 역할을 합니다. 그에 따라 view에서 쉽게 사용할 수 있는 UI state 및 model을 준비합니다. 여기에는 표시하고자 하는 문자열도 포함이 됩니다. 그러나 뷰모델에서 문자열들을 관리할 때, R class를 사용해 Android Resources에 접근하려 할 때 문제가 생깁니다. 왜냐하면 뷰모델은 Context에 접근할 수 없기 때문에 문자열을 가져와 사용할 수 없습니다. 이를 해결하기 위해 아래의 클래스를 사용할 수 있습니다. 이 클래스는 문자열 리소스 ID와 매개변수 목록을 파라미터로 받습니다. class StringResWithPar.. 2023. 2. 6.
[Kotlin][Android] StartActivityForResult 대신 RegisterActivityForResult 사용하기 StartActivityForResult는 안드로이드에서 주요 기능으로 액티비티를 시작하고 결과를 얻어오는데 사용되었지만 deprecated 되고 RegisterActivityForResult로 대체되었습니다. StartActivityForResult가 더이상 사용되지 않는 이유 특정 요청이 이루어지는 위치를 찾기 어려움 중복으로 사용된 경우 고유한 요청 코드를 보내야 했습니다. 이는 가끔 버그가 있는 결과를 불러오기도 합니다. 컴포넌트가 다시 생성되면 결과가 누락됩니다. onActivityResult 콜백이 프래그먼트와는 잘 작동하지 않습니다. RegisterActivityForResult가 더 나은 점 Simple, easy & clean 각 액티비티마다 별도의 callback RegisterActi.. 2023. 1. 17.
[Kotlin][Android] Camposer: Jetpack Compose 카메라 라이브러리 사용하기 안녕하세요. 오늘은 Jetpack Compose 사용 시 쓸 수 있는 카메라 라이브러리 Camposer를 프로젝트에 구현하는 방법을 알아보겠습니다. Set up 먼저, 최신 버전의 dependency를 build.gradle (module)에 추가해줍니다. dependencies { implementation("io.github.ujizin:camposer:") } 작동방법 CameraPreview를 UI에 위치시킵니다. @Composable fun CameraUI(modifier: Modifier = Modifier) { val cameraState = rememberCameraState() CameraPreview( modifier = modifier, cameraState = cameraState,.. 2023. 1. 5.
[Kotlin][Android] Splash Screen(로딩 화면) 구현하기 안녕하세요. 오늘은 안드로이드에서 Splash Screen을 구현하는 3가지 방법에 대해 얘기해보겠습니다. 타이머 사용 Launcher Theme 사용 Splash Screen API (Android 12) 1. 타이머 사용 splash activity를 만들고 onCreate()에 정한 시간동안 보여주는 쓰레드를 위치시킵니다. class SplashScreenActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash_screen) //이 메소드는 타이머가 끝나면 실행됩니다. H.. 2022. 12. 23.
[Kotlin][Android] Jetpack Compose로 진행중 애니메이션 만들어보기 안녕하세요. 오늘은 Jetpack Compose를 사용해서 진행중임을 표시할 수 있는 애니메이션 UI를 만들어보겠습니다. 더보기 Jetpack Compose란? Jetpack Compose는 네이티브 UI를 빌드하기 위한 Android의 최신 툴킷입니다. 더 적은 수의 코드, 강력한 도구, 직관적인 Kotlin API로 Android에서의 UI 개발을 간소화하고 가속화하여 앱에 생동감을 더해줍니다. Android UI를 더 빠르고 쉽게 빌드할 수 있습니다. https://developer.android.com/jetpack/compose 1.Twin circle animation 1) UI 구성하기 가장 바깥에 위치한 원에 대한 Row를 만들고 내부에 쌍둥이 원에 대해 두개의 Box를 사용했으며 두 개의.. 2022. 12. 18.
[Kotlin] onBackPressed() deprecated , 대체할 메서드는? 안녕하세요. 오늘은 deprecated 된 onBackPressed()를 어떤 메서드로 대체할 수 있는지에 대해 알아보겠습니다. onBackPressed () 란? 액티비티에서 사용자가 뒤로 가기 키를 눌렀을때 이를 감지하여 호출되는 메서드입니다. 주로 뒤로 가기 클릭 시 행동을 제어할 때 사용했습니다. 하지만 API 레벨 33부터 더이상 사용되지 않는다고 안드로이드 디벨로퍼 공식문서에 명시되었고 대신 OnBackInvokedCallback 또는 androidx.activity.OnBackPressedCallback 를 사용하기를 권고하고 있습니다. FragmentActivity와 AppCompatActivity의 기본 클래스인 ComponentActivity를 사용하면 OnBackPressedDispa.. 2022. 12. 12.
[Kotlin][Android] 키보드 열고 닫을 때 view를 부드럽게 이동시키기 안녕하세요. 오늘은 키보드가 나타나거나 사라질 때 view를 부드럽게 이동시키는 방법을 알아보겠습니다. 애니메이션은 API 레벨에 따라 다르게 작동합니다. API 30 이상 : 키보드 움직임과 동기화되어 뷰가 움직입니다. API 21 ~ API 29 : 뷰가 키보드와 함께 이동하지만 약간의 지연이 있습니다. API 20 이하 : 뷰가 키보드 위의 위치로 이동하고 애니메이션이 없습니다. 총 2단계에 걸쳐 알아보겠습니다. 키보드를 따라 뷰를 이동시키기 뷰의 이동을 더 부드럽게 하기 1. 키보드를 따라 뷰를 이동시키기 키보드의 상태에 따라 뷰를 이동시키는 방법은 두가지가 있습니다. 첫번째는, AndroidManifest.xml 내부에 adjustPan 플래그를 설정하는 것입니다. 두번째는, 프로그래밍 방식으로.. 2022. 12. 3.
[Kotlin][Android] DataBinding + RecyclerView 함께 사용해보기 안녕하세요. 오늘은 안드로이드에서 많이 사용하는 리사이클러뷰를 데이터바인딩 라이브러리와 함께 사용하는 방법에 대해 알아보겠습니다. (이 글은 리사이클러뷰를 사용할 줄 안다는 전제하에 작성하였습니다.) 더보기 * Data Binding Library 이란? 데이터 바인딩은 안드로이드에서 제공하는 라이브러리로 액티비티 코드 내에서 UI 컴포넌트에 데이터를 붙이는 것이 아니라 레이아웃에서 UI 컴포넌트와 데이터를 연결시켜놓을 수 있습니다. 기존 연결 방법 findViewById(R.id.sample_text).apply { text = viewModel.userName } 데이터 바인딩 빈 프로젝트를 새로 생성한 후 데이터바인딩을 사용하기 위해 build.gradle(module) 파일에 아래 코드를 입력해줍.. 2022. 11. 18.