본문 바로가기

Android

(30)
Reminder 기능 구현하기 구현하고자 하는 기능 Task에 설정된 날짜, 시간에 맞춰 Notification을 띄워주는 기능. 조금씩 업그레이드하며 개발하기 RecyclerView의 Item을 클릭했을 때 -> Notification 발행하기. Task를 저장하거나 수정했을 때 -> Alarm 등록하기. 등록된 알람은 BroadcastReceiver가 받아서 백그라운드 작업으로 Notification 발행하기. 필요한 기능의 단위를 쪼개서 개발해나간다. Notificatino 발행 기능 Notification이란 안드로이드 운영체제에서 유저에게 발행하는 알림이다. 노티피케이션을 내보내기 위해서는 시스템으로부터 NOTIFICATION_SERVICE를 빌려와서 실행해야한다. 즉, 만들어진 Notification 객체를 OS에게 보내어..
Logic 분리하기 # Logic 분리하기 우선 Add와 Edit기능을 하는 AddEditTaskFragment에서 작동하는 로직을 분석해보자. 간단하게 표현하면 사용자에게 Task 정보를 입력받는다. 입력 받은 정보를 Task 오브젝트로 만든다. 생성된 오브젝트를 DB에 추가한다. 3단계로 표현할 수 있다. 여기서 Edit인 경우는 기존 Task를 불러오는 선행작업이 추가된다. # 각 Logic을 처리해야하는 곳을 생각해보자. 1번은 사용자가 View에 입력값을 입력하는 상황이다. View를 다루는 Fragment가 이 로직을 처리하기 적합한 위치일 것이다. 2번은 View에 입력된 값을 취합하여 Task 오브젝트로 만드는 일이다. View의 값을 읽기 위해서는 EditText 등 입력에 관여하는 View를 사용해야하므로..
EditText Scrollable Title을 입력 받는 EditText와 다르게 Description는 여러 줄의 내용을 입력받을 수 있다. 하지만 EditText의 Height를 무한히 늘일 수 없기 때문에 5줄의 내용만 보여지도록 제한시켜놓았다. 만약 장문을 입력한다고 했을때 화면에서 보여지는 이전 내용을 수정하기 위해서는 여타 다른 에디터처럼 스크롤해서 윗부분으로 커서를 이동시킬 수 있어야한다. 에디트텍스트의 멀티라인 적용 그리고 스크롤적용 코드는 간단하다. 두 가지 옵션값으로 간단하게 지정할 수 있다. ## android:lines="5" 그리고 android:maxLines="5"의 차이점. lines="5"의 경우 EditText의 기본 높이가 5줄에 고정된다. 아무런 내용이 없을 때에도 5줄을 차지한다. 그리고 내용이 5줄..
자동 Keypad 보여주기 새로운 Task를 생성할때 가장 먼저 하는 일은 Task의 제목을 입력하는 것이다. 오늘 구현할 기능은 Task Add모드로 진입시에 제목을 빠르게 입력할 수 있도록 Keypad를 자동으로 띄워주는 기능이다. AddEditTaskFragment에 진입했을 경우 자동으로 키패드를 보여준다. 그리고 바로 제목을 입력할 수 있도록 도와준다. 반대로 AddEditTaskFragment에서의 작업을 마친 경우 키패드를 숨겨야한다. 그리고 키패드가 화면의 많은 부분을 차지하여 EditText에 정보를 입력하는 경우를 제외하고는 사용에 불편함을 주기 때문에. 다른 메뉴 항목을 선택했을 경우에도 키패드는 숨겨져야한다. Keypad Control 키패드를 관리하기 위해서 KeypadUtils라는 클래스를 독립적으로 생성..
NavIndicator와 NavigationUp 현재 Drawer를 사용해서 메뉴를 선택하는 구조를 사용하고 있다. 그리고 Drawer와 ActionBar는 Activity에 속해 있으며, 이 부분을 제외한 부분을 Fragment가 사용한다. 우선 Navigation Component에서 NavigationView 동작을 사용할 수 있도록 연결시키자. // navController와 drawer를 연결하여 동작하도록 이어준다. NavigationUI.setupActionbarWithNavController(this, navController, drawer); navController와 Drawer를 연결시키는 코드를 적용하고 실행해보면 navController.navigateTo()의 메소드를 실행함과 동시에 ActionBar의 Icon이 자동으로 변..
FloatingActionButton Anchor to Appbar FAB 버튼을 Appbar에 부착하기 CollapsingToolbarLayout은 Toolbar를 확장된 영역으로 보여주고 스크롤 시 축소시켜 기존의 Toolbar기능을 보여주는 레이아웃이다. 이때 Floating Action Button을 Toolbar에 부착하면 Toolbar의 크기가 줄어들 때 FAB가 사라지도록 할 수 있다. 두 화면에서 다른 방식으로 FAB를 사용하기 현재 2개의 다른 Fragment를 가지고 있다. TaskListFragment와 AddEditTaskFragment이다. TaskListFragment는 RecyclerView를 갖고 있으며 아래로 길게 스크롤하며 사용될 가능성이 높다. 그러므로 스크롤 시에 FAB이 Toolbar에 숨겨지는 Anchor 모드보다는 보편적으로 사용..
Navigation Component 사용하기 Navigation Component를 사용해서 화면 전환하는 것을 알아보자. Navigation Component에 대해서 간단히 정리해보면 nav_graph.xml에 Navigation에 사용될 화면들을 정의해두고 Java에서 이것을 사용해서 화면전환을 하는 구조이다. 크게 Navigation을 실행하는 NavController가 있고, 화면이 전환되는 영역인 NavHostFragment가 있다. 화면 단위는 Destination이라는 용어로 부르고 Fragment를 사용해서 구성된다. 1. Destination 추가하기 오늘은 task_list에서 addEditTaskFragment로 화면전환을 할 것이다. 두 목적지 사이에 화살표는 Action이라고 불린다. 한 화면에서 다른 화면으로 이동할 수 ..
Fragment에 리스트 출력하기 Part.2 앞에서 인터페이스를 사용해서 이미 생성된 Fragment에게 데이터를 전달하는 방법을 구현해보았다. 하지만 그것보다 간단하게 같은 기능을 수행하도록 할 수 있다. 우리에게는 이미 Activity와 Fragment가 공유하고 있는 ViewModel 영역이 있다. ViewModel은 Activity보다 긴 생명주기를 가지고 View 간에 데이터를 공유하기 위한 목적을 가지고 있다. ViewModel에 Filter라는 라이브데이터를 추가하고 Activity에서 메뉴를 선택 시에 LiveData에 값을 포스트하고 TaskListFragment는 Filter를 관찰하고 있다가 변화를 감지했을 때 리스트를 바꾸어 업데이트하면 된다. 새로운 인터페이스 정의도 필요없고, 복잡한 형변환도 필요없다. 이미 구현된 뷰모델이..