분류 전체보기

Android

How to Hide keyboard from fragments

이번에 소개할 내용은 프래그먼트들에게서 키보드(SoftInput 또는 keypad)를 내리는 방법이다. (누군가 더 좋은 방법을 소개시켜준다면 기꺼이 교체할 생각이 있다.) 시작해보자. 일단 이런 동작이 필요하게 된 배경은 이러하다. 흔히 사용하는 BottomNavigationView의 메뉴 아이템을 선택해 다른 프래그먼트를 보여줘야 할 때, 이전 프래그먼트에서 입력하던 사항이 있다면 키보드를 내리면서 프래그먼트가 전환되어야 한다. 안드로이드에 익숙한 개발자라면 키보드 내리는 동작은 익숙해져 있을 것이다. 나에게 문제는 이 동작을 어디서, 얼마나 실행하느냐가 문제였다. 그래서 프래그먼트가 교체되는 ItemSelectedListener에서 실행해주었다. 여기서 기존에 모든 프래그먼트를 hide시킨 뒤, w..

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 BottomSheetDialogFragment Scrim 영역 터치 동작

저번 글에서는 BottomSheet의 높이를 조절했다. 이번에는 BottomSheet Scrim 영역(외부 영역)을 터치 시 BottomSheet가 내려가지 않도록 해보겠다. 코드를 설명하기 앞서 이런 동작을 유도한 이유가 있는데 BottomSheet에는 2가지 종류가 있다. Standard bottom sheet, Modal bottom sheet이다. https://m3.material.io/components/bottom-sheets/guidelines (Material design 공식 사이트 설명이다) 공식 사이트를 보면 Modal 방식의 바텀 시트는 Standard 방식과 달리 다이얼로그처럼 앱 컨텐츠 영역 앞에 보이게 되고 다른 앱 기능을 일시적으로 제한한다. 그래서 Scrim 영역(외부 영..

Android

Android BottomSheetDialogFragment Height 조절하기

이번에 프로젝트를 진행하며 가장 힘들었던 BottomSheet의 높이를 조절하게된 과정을 소개하려고 한다. 내가 의견을 내서 사용하게된 Material 디자인의 BottomSheet 기능인데 이렇게 고된 길을 걷게 될 줄 몰랐다. 왜 BottomSheet height를 조절해야 하지? Customizing이 된 BottomSheet를 사용하기 위해 BottomSheetDialogFragment를 상속하여 만든 CustomBottomSheetDialogFragment 클래스를 만들었다. 그리고 막연하게 onCreateView에서 뷰를 바인딩해주고 실행해본 결과 계속 BottomSheet가 엄청 찔끔 올라왔다. 해당 화면을 캡쳐해두진 않아서 보여줄 순 없지만 화면 높이의 1/10정도..? 이유는 기본적으로 ..

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..

주저리주저리

개발자의 글쓰기를 읽고 나서(完)

독자 관점에서 릴리즈 노트 작성하기 요즘 내가 가장 자주 작성하는 문서 중 하나이다. 여기서도 내가 원하는 중간을 가기가 생각보다 어렵다. 시간을 써서 자잘한 버그를 엄청 많이 잡아내면 뭔가 릴리즈 노트에 이런 내용을 다 적고 싶다. 하지만, 이런 버그 하나하나 모두 적게되면 독자 입장에서 읽기도 싫고 이렇게 버그가 많은 게 자랑인가 싶을 것이다. 반대로 '사소한 버그들을 수정했다'는 한 문장으로 퉁치는 순간 일한 보람도 없고 인정받기도 힘들다. 그래서 우선 순위를 정하여 릴리즈 노트를 작성해야 한다. 여기서 독자를 고려해 우선 순위를 정해야 하는데 독자는 회사가 될 수도 있고, 일반 소비자가 될 수도 있다. 독자가 관심있게 볼 내용과 관심도가 떨어지는 내용을 구분하여 다르게 작성해야 한다. 이것으로 이..

주저리주저리

개발자의 글쓰기를 읽고 나서(3)

이번 글의 시작은 에러 메시지에 관한 내용이다. 사용자와 소통하는 에러 메시지 작성하기 웹 페이지에서 가장 자주 볼 수 있는 에러 404. 404 에러 화면에서도 사용자의 평가가 갈릴 수 있다. 구글의 404 화면을 보면 상당히 심플한데 이를 실제로 불편해하는 사용자도 있다. (사용자 본인이 링크를 잘못 입력한 것인지, 구글이 페이지를 삭제하는 바람에 에러 화면을 마주하게 된 것인지 모르기 때문) 반면, 위키피디아의 404 화면에는 사용자가 의도한 URL을 추측해서 제안하기도 한다. 친절하게도 우리나라의 경우에는 고객센터로 문의하는 링크가 포함되어 있는 경우가 대부분이다. 여기서 404 에러는 고객에게 죄송해야할까? 이것은 경우에 따라 다르다. 사용자가 URL을 잘못 입력한 경우에는 개발자가 죄송할 이유..

주저리주저리

개발자의 글쓰기를 읽고 나서(2)

저번에 예고했던 대로 변수와 함수 이름을 짓는 법을 소개하는 것으로 이번 글을 시작하도록 하겠다. 변수 이름 짓기 우리는 흔히 반복문이나 배열 인덱스에 i라는 변수를 자주 사용한다. 이는 integer나 index의 첫 글자로 간주되므로 이상할 것이 없다. 하지만, d라는 변수가 있다면 해당 코드를 읽는 사람은 어떻게 받아들여야 할까? day? double? date? 책에서 소개하길 일자를 뜻하는 변수를 설정하고 싶다면 그냥 day를 사용하면 된다. 하지만, 우리가 어떤 프로그램이던 그냥 day란 없을 것이다. today? selectedDay? finalDay? 등 특정한 의미를 부여해 사용해야 한다. 변수 이름을 지을 때 고려할 또 하나의 척도가 있다. 바로, 검색이 용이한 이름이다. IDE가 발전..

BonusTrack02.dev
'분류 전체보기' 카테고리의 글 목록 (9 Page)