안드로이드

Android

Codelab으로 Room 알아보기 - 3. Create the DAO

이번에는 Data Access Object인 DAO를 만들어 볼 것이다. DAO는 안드로이드에서 DB의 insert, delete, update에 대한 편의성을 제공한다. Room DB를 사용할 때 코드에서 함수를 정의하고 호출하여 DB를 쿼리한다. 이러한 함수들은 SQL 쿼리들을 매핑한다. 주석(annotation)을 사용하여 DAO에 이러한 매핑을 정의하면 Room이 필요한 코드를 생성한다. DAO를 DB에 접근하기 위한 인터페이스로 생각하면 된다. 추가로, 쿼리를 생성할 때 컴파일러가 문법 에러를 검사해준다. (개인적으로 잘못된 컬럼을 조회하는 일은 적어질 거라 생각한다) sleep-tracker 데이터베이스에 아래 나열한 것들을 해야한다. night를 삽입한다. 존재하는 night에 종료 시간과 ..

Android

Android BottomSheet Material Theme 적용하기

오늘은 바텀시트에 이미 프로젝트에 적용되어있던 Material3 테마를 적용해본 내용을 적어본다. 먼저, 내 상황은 이렇다. 프로젝트에 Material3 테마로 색상이 정의되어 있었다. 바텀시트는 커스터마이징을 위해 별도 클래스로 작성되어 있다. (BottomSheetDialogFragment를 상속받고 있다.) 바텀시트의 버튼은 Material3 테마를 사용하지 않고 AppCompat 테마를 사용한다. 또, 프로젝트 테마의 parent는 Theme.Material3.Light.NoActionBar이다.(라이트 모드 기준) 여기서 문제가 되는 지점은 바텀시트의 parent를 누구로 지정해야 하는가 이다. BottomSheet라 검색하면 굉장히 많은 테마가 검색되는데 답을 먼저 말하면 Theme.Mater..

Android

Android BottomNavigationView Uncheck All Items

이번에는 BottomNavigationView의 모든 아이템이 선택되지 않은 상태로 만들어보려고 한다. 이 동작을 구현하게 된 배경은 BottomNavigationView와 FloatingActionButton을 같이 사용하기 위함이었다. FloatingActionButton(줄여서 FAB라 부르겠다)을 BottomAppBar 안에 cradle 모드로 anchor 시키며 사용하던 중, FAB를 눌렀을 때 다른 프래그먼트가 보여야하므로 이 때 BottomNavigationView(줄여서 BNV)의 다른 모든 아이템이 선택된 상태로 있으면 안됐다. BNV의 모든 아이템을 선택되지 않은 상태로 만들기 위해 여러 사이트를 돌아다니다 짧은 해결법을 찾았다. 일단 나는 코틀린을 사용하고 있어서 확장함수 형태로 구현..

Android

Android DialogFragment Button Text Size(텍스트 크기 조절)

DialogFragment를 사용하던 중 Positive, Negative Button의 텍스트 사이즈 조절이 필요해졌다. DialogFragment에서는 onCreateDialog에서 AlertDialog.Builder가 create한 AlertDialog를 리턴하는데 create 이전에 간단한 다이얼로그 생성하듯 setTitle, setMessage, setPositiveButton 등을 호출한다. 나는 여기서 setPositiveButtonTextSize와 같은 메소드가 있을 줄 알았지만 없었다. (그러니깐 이 글을 쓰고 있겠지만) 아래는 onCreateDialog 메소드를 사용한 gist이다. https://gist.github.com/BonusTrack02/a22f1ef8c29dae79e6fca..

Android

Android RecyclerView ItemDecoration in Kotlin

내가 이 클래스를 사용하게 된 이유 내가 사용하던 RecyclerView에는 각 아이템 하단에 구분선(Divider)이 있다. 이전에는 해당 아이템을 구성하는 xml에 MaterialDivider를 배치했었다. 새로운 요구사항이 들어오면서 구조 변경의 필요성을 느끼게 되었다. 새로운 요구사항은 마지막 아이템은 구분선이 가로 전체를 차지하도록 변경하는 것이었다. 새로운 요구사항에 따른 시도 RecyclerView Adapter의 onBindViewHolder에서 마지막 아이템을 확인해서 AttributeSet을 다시 할당해주었다. 나름 그럴싸한 로직이라 생각했다.(내 기준) 그 결과, 알 수 없는 버그들이 밀려들어왔다. 처음 adapter를 할당했을 땐 마지막 아이템에만 해당 AttributSet이 적용되..

Android

Codelab으로 Room 알아보기 - 2. Create the SleepNight entity(ㄴ)

Step 1. Create the SleepNight entity 이번 과제에서는 하룻밤 수면을 데이터베이스 엔티티를 의미하는 annotated data class로 정의한다. 하룻밤의 수면을 위해서는 시작 시간, 종료 시간, 퀄리티 등급을 기록해야 한다. 그리고 하룻밤을 구분하기 위해 고유 아이디가 필요하다. 1. database 패키지의 SleepNight.kt 파일을 연다. 2. SleepNight 데이터 클래스를 id, 시작 시간(millisecond 단위), 종료 시간(millisecond 단위), 숫자의 수면 퀄리티 등급 파라미터를 사용해 만든다. 품질 데이터가 수집되지 않았다는 것을 나타내기 위해 sleepQuality를 -1로 초기화해야 한다. 시작 시간을 유효한 시간으로 초기화한다. 선택..

Android

Codelab으로 Room 알아보기 - 2. Create the SleepNight entity(ㄱ)

안드로이드에서 데이터는 데이터 클래스로 표현된다. 이 데이터는 함수 호출에 의해 접근되고 수정될 수도 있다. 그러나, 데이터베이스 세계에서는 데이터에 접근하고 수정하기 위해서는 entity와 query가 필요하다. 엔티티는 속성과 함께 데이터베이스에 저장할 객체나 개념을 의미한다. 우리의 앱 코드에서 테이블을 정의하는 entity class가 필요하다. 해당 클래스의 각 인스턴스는 해당 테이블의 행을 의미한다. Entity class는 데이터베이스의 정보를 표시하고 상호 작용하는 방법을 Room에 알려주는 맵핑이 있다. 우리 앱에서 엔티티는 하룻밤 수면에 관한 정보를 가지고 있을 것이다. 쿼리는 테이블(혹은 테이블 조합)의 정보 또는 데이터 요청이거나 데이터에 대한 작업을 수행하기 위한 요청이다. 일반적..

Android

Android Notification Max Count

저번 Notification 글에 이어 이번 글은 알림 최대 갯수에 관한 포스팅이다. 글을 시작하기 앞서, 여러 자료를 통해 확인한 부분도 있고 내가 수동으로 테스트를 통해 직접 확인한 부분도 있다. 물론 확인되지 않은 부분도 있다. (이런 부분은 계속 짚고 넘어갈 예정이다.) 알림 최대 갯수라고 해서 헷갈릴 수 있는데 앱마다(?) 백그라운드에서 알림이 누적되는 최대치가 있다. (사실 앱마다인건지 해당 알림의 channelId마다인 지는 정확하지 않다) 아무튼 알림이 누적되는 양이 제한되는데 갤럭시 플래그십 라인업은 24개가 대부분이다. (OS 10 이상) 회사에서 Pixel폰으로 테스트해보았을 때는 50개였다. (스택오버플로우에서 찾은 구글 소스 코드 원본도 50개가 최대치이다.) 특정 폰에서는 10개..

Android

Android Notification 누적시키기

상용 앱들을 보면 어떤 푸시 알림이 왔을 때 해당 푸시가 누적되는 경우가 다반사이다. 하지만, 나는 해당 기능에 대해 구현할 생각을 해본 적이 없었다. 이 때, 갑자기 회사에서 '푸시가 1개밖에 안 쌓여요. 푸시가 누적되게 해주세요.' 라는 요청을 받았다. 기존 코드 notificationManager.notify(0, notificationBuilderCompat.build()) 이 상황에서는 무조건 0번 id로만 notify하기 때문에 새로운 푸시 내용이 도착해도 기존 푸시가 갱신된다. 해결한 코드 notificationManager.notify((System.currentTimeMillis() / 500).toInt(), notificationBuilderCompat.build()) 이렇게 코드를 ..

Android

Codelab으로 Room 알아보기 - 1. Download and inspect the starter app

이번에는 드디어 Room Database에 대해 알아보러 간다. 완전 처음 보는 코드들이 나를 기다리고 있으리라 믿는다. (자랑은 아닌 듯하다) 시작하겠다. 1. Download and run the starter app 먼저 Github에서 앱을 다운로드 받는다. https://github.com/google-developer-training/android-kotlin-fundamentals-starter-apps/tree/master/TrackMySleepQuality-Starter GitHub - google-developer-training/android-kotlin-fundamentals-starter-apps: android-kotlin-fundamentals-starter-apps andro..

BonusTrack02.dev
'안드로이드' 태그의 글 목록 (6 Page)