안드로이드
[Kotlin] 안드로이드 이미지 저장 기능 사용해보기. Bitmap -> Image File (View, Layout을 이미지로 저장해보기. Android 10(API 29) 이전과 이후 외부 저장소 접근)
앱별 파일에 액세스 | Android 개발자 | Android Developers 앱별 파일에 액세스 대부분의 경우 앱은 다른 앱에서 액세스할 필요가 없거나 액세스하면 안 되는 파일을 만듭니다. 시스템에서 제공하는 아래 위치에 이러한 앱별 파일을 저장할 수 있습니다. developer.android.com 앱 별로 외부 저장소(SD카드)에 접근할 때, Environment.getExternalStorageDirectory()를 사용했었다. 그러나 이 메서드는 API 29 (Android 10)에서 Deprecated되었다. Environment | Android Developers developer.android.com 공식문서에서는 왜 Deprecated되었는지 찾을 수 없었다. 안드로이드 스튜디오에서..
[Kotlin] 안드로이드 리사이클러 뷰 새로고침 기능 사용해보기. SwipeRefreshLayout 사용.
가끔 앱들을 보면, 화면을 아래로 당기면 리스트가 새로고침이 되는 어플들이 있을 것이다. 이런 기능은 어떻게 구현한 것인지 항상 궁금했었는데, 오늘 알아보고 한 번 정리해 보겠다. Swiperefreshlayout | Android 개발자 | Android Developers Swiperefreshlayout 스와이프하여 새로고침 UI 패턴을 구현합니다. 최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전 2020년 7월 22일 1.1.0 - - 1.2.0-alpha01 종속 항목 선언 SwipeRefreshLayout developer.android.com 오늘 이용할 라이브러리는 이 Swiperefreshlayout이라는 라이브러리다. 안드로이드 Jetpack의 구성요소이며, 화면을..
[Kotlin] 안드로이드 리사이클러뷰 안에 리사이클러뷰 사용해보기, 이중 리사이클러뷰 (Feat. 뷰 바인딩, 데이터 바인딩)
RecyclerView로 동적 목록 만들기 | Android 개발자 | Android Developers RecyclerView로 동적 목록 만들기 Android Jetpack의 구성요소 RecyclerView를 사용하면 대량의 데이터 세트를 효율적으로 표시할 수 있습니다. 개발자가 데이터를 제공하고 각 항목의 모양을 정의하면 R developer.android.com 리사이클러뷰는 안드로이드 JetPack의 구성요소 중 하나이다. 이미 오래전부터 안드로이드 개발에서 리스트를 구현할 때에는 리사이클러뷰를 사용한다. 그만큼 유용한 기능이 많이 있다. 리사이클러 뷰를 구현하는 방법은 아래 코드를 살펴보며 차차 알아가겠지만 크게 나뉘어 보자면, 레이아웃 XML에 선언 리사이클러뷰 리스트의 내용물을 담을 Hol..
[Kotlin] 안드로이드 데이터 바인딩, 데이터 결합, Data Binding
데이터 결합 라이브러리 | Android 개발자 | Android Developers 데이터 결합 라이브러리 Android Jetpack의 구성요소. 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선언적 형식으로 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 developer.android.com Android Jetpack의 구성요소 중 하나. 지난 번에 다뤘던 ViewBinding과 같이 쓰인다고 생각하면 된다. 공식문서에는 레이아웃에 선언되어 있는 뷰에 직접 구성요소를 결합한다고 정의되어있다. 원래 view에 특정한 객체의 변수를 보여주려면, 소스 코드에서 다음과 같이 정의했어야 했다. (TextView라고 가정해보자.) findViewById / Kotlin Extens..
[Kotlin] 안드로이드 뷰 바인딩, 뷰 결합, View Binding
뷰 결합 | Android 개발자 | Android Developers 뷰 결합 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩 developer.android.com 뷰 바인딩에 대한 공식문서 뷰 바인딩은 쉽게말해서 코드 파일에서 XML에 정의된 뷰들을 바로 참조할 수 있는 기능이다. 뷰 바인딩은 findViewById를 대체할 수 있다. 따라서 모든 뷰에 대해 findViewById를 일일이 호출할 필요가 없다. 또한 findViewById에서는 잘못된 id를 매개변수로 전달할 경우, null 위험성이 존재한다. 구글에서 Kotlin Extension을 Deprecat..
[Android] Do It! 안드로이드 도전 08. 세 개 이상의 화면 만들어 전환하기 -> 액티비티와 프래그먼트로 구현해보기
Do It! 안드로이드 도전 08. P.259 문제 원래는 액티비티들로 구현하라고 나와있지만 프래그먼트도 사용해서 구현을 해 보겠다. 로그인 액티비티 - 메인 액티비티-(메인메뉴 프래그먼트, 고객 관리, 상품 관리, 매출 관리 프래그먼트)로 만들어 보겠다. 유저의 정보를 나타내는 User 클래스이다. 필수적인 것은 아니고, 그냥 데이터 바인딩에서 쓸 클래스이다. 이제 본격적으로 액티비티 관련한 파일들을 살펴보겠다. 로그인 액티비티 xml version="1.0" encoding="utf-8"?> 로그인 화면의 레이아웃 파일에서는 DataBinding을 이용해서 User 클래스를 태그에 로 넣었다. 그리고 양방향 데이터 바인딩을 사용해서 EditText 값이 바뀔때마다 자동으로 User 클래스의 값도 바뀌..
[Android][Java] 프래그먼트 뒤로가기 누르면 원상복구 + 프래그먼트 데이터 전달
이번 포스트는 프래그먼트에서 뒤로가기 버튼을 눌렀을 때, 원래 있었던 프래그먼트로 돌아오는 것을 알아보겠다. 프래그먼트 관리자 | Android 개발자 | Android Developers 참고: Navigation 라이브러리를 사용하여 앱의 탐색을 관리하는 것이 좋습니다. 프레임워크는 프래그먼트, 백 스택, 프래그먼트 관리자 사용에 관한 권장사항을 따릅니다. Navigation에 관한 자세한 developer.android.com 프래그먼트와 통신 | Android 개발자 | Android Developers 프래그먼트를 재사용하려면 자체 레이아웃과 동작을 정의하는 완전히 독립된 구성요소로 각 프래그먼트를 빌드합니다. 이러한 재사용 가능한 프래그먼트를 정의한 후에는 활동 및 애플리케이 developer..
[Android] Do It! 안드로이드 도전 07. 로그인 화면과 메뉴 화면 전환하기
Do It! 안드로이드 도전 07. P.258 문제 로그인 액티비티와 메인 메뉴 액티비티로 나누어서 구현했다. 요즘 화면 구성은 액티비티 보다는 프래그먼트를 많이 사용하는 추세이다. 그래도 도전 문제의 의도가 ActivityForResult()를 사용하는 것이므로 액티비티 두 개를 사용해서 풀었다. AndroidManifest.xml파일을 수정해서 MAIN 액티비티를 로그인 액티비티로 수정해서 앱을 실행했을 때 로그인 액티비티가 나오도록 구현했다. ActivityResultLauncher 객체를 사용해서 onCreate에서 초기화를 진행했다. 콜백 메서드로 결과코드가 9001이라면 토스트 메시지로 메뉴 이름이 나오게 했다. 어려운 부분은 없으므로 넘어가겠다. 메인 액티비티에서 볼 부분은 버튼을 클릭했을 ..
[Android] SharedPreferences 사용하기
앱에서 간단한 데이터를 저장 또는 복원할 때 SharedPreferences를 사용할 수 있다. 이 기능은 앱 내부에 파일을 하나 만들어서 파일에서 데이터를 저장하거나 읽어올 수 있도록 한다. 개발자는 파일에 접근할 필요는 없고 SharedPreferences의 저장과 복원 메서드를 사용하면 된다. 원래는 Application()을 상속받은 전역 어플리케이션 클래스를 만들어서 그 안에 companion object로 SharedPreferences 객체를 하나 생성한 후 모든 클래스 파일에서 사용할 수 있도록 한다. sharedPreferences 객체를 이용해서 앱을 종료하고 다시 실행했을 때도 저장돼 있는 데이터를 화면에 띄우도록 해보겠다. 생명주기를 이용해보면, onPause()에서 데이터를 저장해..
[Android] 액티비티의 생명주기
안드로이드 시스템은 실행중인 앱의 상태를 직접 관리한다. 이는 앱이 독립적이게 될 경우, 메모리를 과도하게 점유하거나 권한을 과도하게 갖는 것을 방지하는 용도이다. 멀티태스킹을 지원하는 안드로이드의 경우 시스템이 계속해서 모니터링할 필요가 있다. 실행한 액티비티 위에 다른 액티비티가 생성되면, 액티비티는 액티비티 스택에 넣어서 보관하게 된다. 즉 이는 한 액티비티가 다른 액티비티의 상태에 영향을 미칠 수 있음을 의미한다. ex.) 게임 앱을 하던 중 전화가 와서 전화 앱이 최상단에 위치하는 경우 따라서 액티비티는 실행, 중지, 메모리에서 해제되는 여러 과정의 상태 정보를 가지고 있다. 실행(Running) : 화면상에 액티비티가 보이는 형태. 액티비티 스택의 최상위에 위치한다. 일시 정지(Paused) ..