포스팅 썸네일 이미지

학습

EditText에서 하드웨어 키보드 대응하기 with 가상 키보드, 커서

하드웨어 엔터 또는 가상 키보드의 완료 버튼에 해당하는 값EditorInfo는 키 입력을 완료했을 때의 동작에 해당하는 값입니다. EditText의 imeOptions attribute에서 설정할 수 있습니다.아무 것도 설정하지 않으면 기본 값인 actionDone(S23/Android14) 또는 actionNext(S9/Android10)로 설정됩니다. 완료 : EditorInfo.IME_ACTION_DONE, EditorInfo.IME_ACTION_SEARCH,  EditorInfo.IME_ACTION_SEND, EditorInfo.IME_ACTION_NEXT    actionDone은 다음과 같습니다. actionSearch는 다음과 같습니다.  actionSend는 다음과 같습니다.   엔터..

2024.05.02 게시됨

포스팅 썸네일 이미지

학습

FrameLayout에서 Fragment 올바르게 사용하기

FrameLayout에서 Fragment를 사용하는 방법안드로이드 공식 문서에서 Fragment를 위한 container로 FragmentContainerView 사용을 강력하게 권장합니다.It is strongly recommended to always use a FragmentContainerView as the container for fragments, as FragmentContainerView includes fixes specific to fragments that other view groups such as FrameLayout do not provide.https://developer.android.com/guide/fragments/create#add 그럼에도 FrameLayout에서..

2024.05.02 게시됨

포스팅 썸네일 이미지

학습

Fragment에서 ViewPager2 + TabLayout 사용하기

Fragment에서 ViewPager2를 사용하게 된 이유공식 문서 가이드(https://developer.android.com/develop/ui/views/animations/screen-slide-2)에 따라 Activity에서 ViewPager2를 사용했습니다. ViewPager에 있는 Fragment에서 새로운 Fragment 화면을 보여줘야 했습니다.  FragmentContainerView가 없다보니, 아래와 같이 Fragment의 root layout의 Fragment를 바꿔주도록 구현했습니다. // Fragment 최상위 Layout에 id를 설정val bundle = Bundle().apply { putParcelable(BUNDLE_KEY_FOR_CONTACT_INFO..

2024.04.24 게시됨

포스팅 썸네일 이미지

학습

직렬화란 무엇이고, 왜 필요하며, 어떻게 직렬화를 할 수 있을까?

직렬화란?직렬화란 Application에서 사용하는 데이터를 네트워크를 통해 전송할 수 있는 형태, 데이터베이스나 파일에 저장할 수 있도록 바이트 스트림(byte stream) 형태로 변환하는 과정을 의미합니다. 역직렬화란 외부 소스로부터 읽어온 데이터를 runtime Object로 변환하는 작업을 의미합니다. 직렬화 포맷으로 자주 사용되는 형태는 JSON, Protocol buffers가 있습니다. 그 외에 CBOR, Properties, HOCON 등이 있습니다. 직렬화를 해주는 이유는?만약 Android와 IOS 간에 통신을 할 때, Android에서 사용하는 데이터 클래스 형태 그대로 IOS에게 전달하면, IOS는 수신한 바이트코드만으로는 데이터를 해석할 수 없습니다. 그래서 Android와 IO..

2024.04.18 게시됨

포스팅 썸네일 이미지

학습

Android Task와 ACTIVITY FLAG 정복하기

Android Task를 학습하게 된 이유카카오톡 대화방에서 링크를 누르면 WebView로 열리게 되는데, 최근 앱 목록 버튼을 누르면 목록에 개별적으로 존재하는 것을 볼 수 있습니다. 각 화면은 카카오톡 아이콘으로 동일한데, 어떻게 별도의 화면으로 목록에 존재하는 걸까요?각 화면이 별도의 Activity Task로 정의되어 있기 때문인데, Task와 관련된 개념을 예제와 함께 알아보겠습니다.  기본 개념 익히기 Root Activity에 대한 back Button 효과 Android Manifest에서 intent_fliter로 ACTION_MAIN, CATEGORY_LAUNCHER가 설정된 Activity를 Root launcher Activity라고 부르며, 이 Activity는 앱의 진입점이 됩니..

2024.04.07 게시됨

포스팅 썸네일 이미지

학습

Android 이미지 읽기 권한 다루기

권한 없이 이미지 파일을 사용자로부터 입력 받는 방법Photo picker를 이용하거나 https://developer.android.com/training/data-storage/shared/photopicker 사진 선택 도구  |  Android DevelopersDataStore offers a more modern way of storing local data. You should use DataStore instead of SharedPreferences. Read the DataStore guide for more information. 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 사진 선택 도구 컬developer.android.com Intent와 regis..

2024.04.02 게시됨

포스팅 썸네일 이미지

학습

ViewModelProvider, ViewModelStore

오늘은 Pluu 개발자 님의 ViewModelProvider 글을 읽고 정리했습니다. https://pluu.github.io/blog/android/2020/05/04/viewmodel-b-to-d/ Pluu Dev - ViewModel의 B에서 D까지 [DataBinding] 중복으로 BindingAdapter가 생성되는 문제 코드 Posted on 23 Mar 2024 UI Code Snippet용 Plugin 제작기 ~ 4부 : Drag, Copy, Paste Posted on 17 Mar 2024 UI Code Snippet용 Plugin 제작기 ~ 3부 : Import Posted on 09 Mar 2024 UI pluu.github.io ViewModelProvider activity-ktx..

2024.03.29 게시됨

포스팅 썸네일 이미지

학습

Kotlin companion object vs Kotlin object in class vs Java static

목차 object 키워드는 무엇인가 object class는 무엇인가 companion object는 무엇인가 Java에서의 Kotlin Companion object Companion object에서 const val는 어떻게 변환될까 class 내의 object class와 companion object는 어떤 차이가 있는가 Java static block @JvmStatic @JvmField 자바에서 Kotlin Companion Object와 같은 클래스 만들어보기 1. Kotlin에서의 object 키워드 object 키워드를 이용해서 클래스를 정의하면, 정의와 동시에 인스턴스(객체)를 생성합니다. object 키워드를 사용하는 상황은 아래와 같습니다. 이 중에서 객체 식을 제외한 나머지 2가지..

2024.03.22 게시됨

포스팅 썸네일 이미지

학습

EditText가 입력된 text를 복원하는 과정

EditText는 입력한 state를 복원해준다. EditText에 입력한 값은 별도의 State로써 직접 관리하지 않아도, 입력한 값이 복원되어 사용자에게 그대로 보입니다. 단, xml에서 id를 설정해준 경우에만 동작합니다. 로그로 찍어보면 어떨까요? onCreate 함수에서 EditText에 있는 text 값을 찍어본 결과, 입력한 값이 아닌 빈 값이 출력됐습니다. 왜 그럴까요? EditText의 동작 원리 이유는 EditText에 입력된 값이 복원되는 것은 savedInstanceState를 이용한 방식이기 때문입니다. onCreate에서도 savedInstanceState를 파라미터로 입력받고 있기에 onCreate에서 복원될 수도 있지만, onCreate에서 복원되지 않은 경우에는 onRest..

2024.03.20 게시됨

포스팅 썸네일 이미지

학습

자바 Static, Kotlin Companion, 그리고 Annotation의 Function

Annotation 파라미터 특징애노테이션 인자는 컴파일 시점에 그 값이 무엇인지 알 수 있어야 합니다. 따라서 임의의 프로퍼티를 인자로 지정할 수는 없습니다. 프로퍼티를 애노테이션 인자로 사용하려면 그 앞에 const 변경자(컴파일러는 const가 붙은 프로퍼티를 컴파일 시점 상수로 취급합니다.)를 붙여야 합니다. const val TEST_TIMEOUT = 100L @Test(timeout = TEST_TIMEOUT) fun testMethod() { ... }함수는 상수가 아닌 걸까요?JUnit5 테스트 코드를 작성할 때, ParameterizedTest에서 MethodSource의 인자로 전달하는 함수에 JvmStatic 애노테이션을 붙이지 않으면 테스트 코드가 동작하지 않습니다..

2024.03.16 게시됨