본문 바로가기

Android

(30)
Toolbar와 ActionBar의 차이점 안드로이드에서는 Toolbar에 대한 동작을 검색하다보면, ActionBar와 Toolbar를 섞어서 사용하는 답변을 많이 볼 수 있다. 이번에 두 가지 위젯의 차이점을 살펴보자. ActionBar와 Toolbar의 차이점 패키지명을 확인해보면 ActionBar는 더 상위 패키지인 android.app에 속한 것을 확인할 수 있다. 실제로 ActionBar는 Activity에 포함되어 있는 기능이다. ActionBar는 Android API level 11부터 지원된 아주 오래된 API이다. 공식문서를 살펴보면, "A primary toolbar within the activity that may display the activity title, application-level navigation aff..
Toolbar에 메뉴 추가하기 안드로이드 툴바에는 메뉴를 추가할 수 있습니다. 위 그림에서 점 세개로 표현된 이미지를 클릭하면 등록된 XML 메뉴 리스트를 보여줍니다. 툴바에 메뉴를 inflate 시키는 방법을 검색해보면 대부분 액티비티에서 onCreateOptionsMenu(menu: Menu?)메소드를 통해 메뉴를 툴바에 입히고(inflate), 선택된 메뉴에 대한 이벤트 처리는 onOptionsItemSelected(item: MenuItem): Boolean을 통해서 처리하는 것을 볼 수 있습니다. 이러한 방법은 툴바를 액티비티에 속해 있는 ActionBar로 취급할 때 사용되는 방법입니다. 만약 툴바를 액티비티 내에 종속시키지 않고, 각 프래그먼트마다 별개로 구현한다면 메뉴를 구성하기 위한 위 메소드들을 프래그먼트에서 가로채..
Android Abstraction Between Packages 아래는 Android Jetpack How to smartly use fragment in your UI(Google I/O 2018) 발표의 스크립트 중 일부입니다. So before we talk about that, I think it's kind of important to go into a little bit about the package layering involved in the Android framewokr, specifically android.widget versus android.app Now, android.widget is really kind of designed to hold all the mechanism for your UI. That means that this is ..
(Part.2) 리사이클러뷰에서 여러가지 타입의 데이터 사용하기 목표 하나의 어댑터에서 여러가지 타입의 데이터를 표시할 수 있다. 리사이클러뷰의 아이템을 접을 수 있다. 구조 이전에 구현했던 어댑터는 어댑터 클래스 내부에서 사용자에게 보여지는 그릇에 해당하는 ViewHolder, 그리고 음식에 해당하는 Data를 모두 관리한다. 모델과 뷰를 분리하는 패턴의 관점에서보면 어댑터가 너무 많은 기능을 담당하고 있어서 비대해지는 것이라고 볼 수 있다. 그래서 Adapter는 기존 ViewHolder를 생성하고 데이터를 생성된 ViewHolder에 담는 역할을 수행하는 것으로 역할을 제한시키고, 데이터를 관리할 수 있는 Section이라는 개념을 추가한다. Section은 어댑터가 데이터를 다루기 위해 사용하는 클래스이다. ItemSection은 하나의 데이터를 담는 섹션 타..
(Part.1) 리사이클러뷰에서 여러 타입의 데이터 사용하기 목표 리사이클러뷰의 아이템을 접을 수 있는 기능 구현하기. 할 일(Task)의 수가 많아질 경우 원하는 할 일을 찾으려면 스크롤을 많이 해야하는 경우가 생긴다. Header를 사용해서 Task를 분류하도록 한다. Header를 클릭하면 하위에 속한 Task 아이템을 접을 수 있도록 한다. RecyclerView Adapter 어댑터의 기본 기능은 사용자에게 RecyclerView에 내용을 채워넣어 보여주는 역할이다. 여기서 내용(Data)는 음식에 비유할 수 있고, 뷰홀더는 음식을 담는 그릇이라고 생각해보자. 어댑터는 음식에 어울리는 그릇을 찾고, 음식을 담아서 고객에게 내보내는 직원의 역할을 한다. 어댑터 직원이 다루는 음식은 List 타입으로 다루어지며, onCreateViewHolder()와 onB..
Dagger setup with WorkManager 목표 WorkManager를 사용하기 위해서 결정하고 제일 먼저 해야할 일은 Worker에 의존성 주입을 설정하는 일이다. 우리가 해야할 백그라운드 작업은 내일 할 일을 불러올 수 있어야하고, 알람을 등록할 수 있어야한다. 그러므로 TaskRepository와 AlarmUtils의 주입이 필요하다. Worker에 객체를 주입하기 위해서 필요한 설정을 알아보자. Dependencies 우선 WorkManager를 사용하기 위해서는 dependencies 추가가 필요하다 // WorkManager implementation "androidx.work:work-runtime:2.2.0" 이제 WorkManager, Worker, WorkRequest에 대한 정보들을 사용할 수 있다. Dagger에게 Worke..
WorkManager 목표 내일 실행될 Reminder를 전날에 등록하는 백그라운드 작업을 실행하는 것. 오늘 자정이 지나가기전 내일 사용자에게 알려줘야할 Notification들을 시스템에 등록하는 작업을 실행해야 한다. 특정한 시간 이전까지 실행되어야 한다. 실행이 되지 않을 경우 Reminder가 누락될 수 있다. 실행이 보장되어야 한다. 안드로이드의 백그라운드 작업 안드로이드의 백그라운드 작업은 AlarmManager를 시작으로 JobScheduler등을 거쳐서 최신 WorkManager까지 다양한 라이브러리가 공존한다. 다양한 플랫폼, API 버전등을 포괄해서 지원하는 최신 라이브러리인 WorkManager를 사용해보는 것은 이번 프로젝트의 목표 중에 하나였다. 사용하기에 앞서 WorkManager를 간단히 살펴보자..
Notification에 Content Intent 추가하기 Notification을 클릭했을 시 실행될 화면 추가하기. 목표 사용자가 Notification을 클릭하면 해당 Task의 AddEditTaskFragment 화면으로 실행한다. Content Intent 추가시키기 사용자가 Notification을 클릭했을 때 실행될 화면을 등록하는 란이 Content Intent이다. Notification Action들과 마찬가지로 PendingIntent를 추가시킬 수 있다. 차이점은 Action에서는 Broadcast를 PendingIntent형태로 만든 것을 추가 시켰고, ContentIntent는 App의 스크린 중 하나에 접근하기 위해서 Activity를 PendingIntent 형태로 만든 것을 추가시킨다. PendingIntent contenetInt..