TimePicker를 5분단위, 10분단위로 시간 간격 설정하기 | Android

Ted Park
박상권의 삽질블로그
4 min readFeb 23, 2023

--

- IntervalTimePicker 라이브러리를 사용하면 빠르고 쉽게 적용할 수 있습니다.
- 동작원리도 공유합니다.

알람이나 타이머를 설정하기 위해 목표 시간을 설정하는 UI를 만들어야 하는 경우,
안드로이드의 기본 컴포넌트인 TimePicker를 사용합니다.

TimePicker는 기본으로 1분단위로 설정할 수 있도록 표시합니다.

하지만, 알람을 설정할때 1분단위보다는 5분단위, 10분단위로 스크롤 할 수 있도록 제공하는게 더 유용할 수도 있습니다.
(알람 시간을 AM 7시 27분으로 설정하는 사람은 없으니까요..)
(있나..?)

하지만 TimePicker에서는 원하는 분 단위로 interval을 지정할 수 있는 기능을 제공하고 있지 않습니다.🤬🤬

그래서 직접 만들었습니다.🙏

IntervalTimePicker는 기본 TimePicker를 이용해서 원하는 분단위로 표시할 수 있는 라이브러리 입니다.

사용방법

  • Gradle
repositories {
google()
mavenCentral()
}

dependencies {
implementation 'io.github.ParkSangGwon:IntervalTimePicker:1.0.0'
}
  • xml에서 app:interval 에 원하는 분단위를 지정
<gun0912.intervaltimepicker.IntervalTimePicker
android:id="@+id/time_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:timePickerMode="spinner"
app:interval="5" />

어때요 참 쉽죠?

동작 원리

기본 아이디어는 아래와 같습니다.

직접 만든 TimePicker에서 분(minute)에 표시할 목록을 만들어서 관리하고 
setter(), getter()에서 이 목록을 기반으로 계산해서 처리한다.
  1. TimePicker 내부적으로 사용하고 있는 NumberPicker를 가져온다.
  2. 보여주고자 하는 분단위의 목록을 만든다.
    5분단위라면 (0, 5, 10, 15, … , 55, 60)
    10분단위라면 (0, 10, 20, … , 60)
  3. NumberPicker에 분단위 목록을 사용하도록 지정한다.
  4. 외부에서 사용하는 setMinute() / getMinute()를 override해서
    분단위 만큼을 고려해서 계산하도록 한다.
  5. OnTimeChangedListener에서도 계산된 분단위로 전달할 수 있도록 처리한다.

간단한 CustomView이지만
저와 같은 이유로 이 기능이 필요한 분들을 위해 라이브러리를 만들고 동작원리를 설명 드렸습니다.

이외에도 있었으면 하는 CustomView가 있다면
댓글로 말씀해주셔서 함께 고민해보면 좋을것 같습니다.

오늘도 세상에는 없는 디자인 UI를 만들기 위해
CustomView를 만들고 계시는 여러분들을 응원합니다.

감사합니다. 행복하세요.

안드로이드 개발자들이 모여있는 오픈채팅방에 참여해보세요 .
Q&A 및 팁을 공유하는 방입니다.

--

--