🎨 아날로그, 디지털 시계 
- 화면에 시간을 표시하는 위젯
- 시계를 표현하는 용도
- View 클래스에서 상속받기 떄문에 background 속성 등을 설정할 수 있다.

🎨 크로노미터(Chronometer) 
- 타이머 형식의 위젯
- 일반적으로 시간을 측정할 때 많이 사용함
start(), stop(), reset() 메소드 등 사용 
- 6행: format 속성에서 타이머 앞 문자열을 지정한다.
%s는 '분:초' 또는 '시:분:초' 형식으로 출력해준다.
🎨 타임피커, 데이트피커, 캘린더뷰 
- 타임피커(TimePicker): 시간을 표시, 조절
- 데이트피커(DatePicker)와 캘린더뷰(CalendarView) : 날짜를 표시, 조절

✍🏻 날짜/시간 예약 앱 만들기
- 타이머 기능: <예약 시작>과 <예약완료>를 클릭하면 크로노미터가 타이머로 동작함
- 날짜/시간 설정: <날짜 설정>, <시간 설정>을 클릭하면 예약 날짜와 시간을 변경 가능
- <예약완료>를 클릭하면 설정한 날짜와 시간이 결정됨

XML 파일을 먼저 수정해보자. 
- 6행:
00:00과 같이 출력되도록 크로노미터 형식을 설정한다.
- 22행: 캘린더뷰가 포함된 리니어 레이아웃이 나머지 높이를 꽉 채우도록
layout_weight를 1로 설정한다.
- 23~29행: 캘린더뷰와 타임피커가 동시에 들어가도록 프레임레이아웃을 설정한다. 이후 Java 코드에서 라디오버튼을 선택하면 캘린더뷰와 타임피커 중 한 가지만 보이도록 설정할 것이다.
- 41행: 총 8개의 텍스트뷰가 추가로 들어간다.
(00, 월, 00, 일, 00, 시, 00, 분 예약됨)
Java코드에서 변수를 선언해보자. 
- 3행: 타이머로 사용할 크로노미터 변수
- 4행: <예약시작>과 <예약완료>의 변수
- 5~7행: 라디오버튼 변수 2개, 날짜를 설정할 캘린더뷰 변수, 시간을 설정할 타임피커 변수
- 8행: 맨 아래에 출력될 연, 월, 일, 시, 분의 숫자에 해당하는 텍스트뷰 변수 5개
- 9행: 캘린더뷰에서 선택할 연, 월, 일에 해당하는 변수
이제 메인함수인 Oncreate() 내부를 코딩해보자. 
- 6~21행: 위젯 변수 12개에 위젯을 대입
- 23~24행: 처음에는 캘린더뷰와 타임피커가 보이지 않도록 설정
라디오버튼을 클릭하면 캘린더뷰와 타임피커 중 하나씩만 보이도록 클릭 이벤트 리스너를 작성해보자. 
- 3~4행: <날짜 설정> 라디오버튼을 클릭하면 캘린더뷰만 보이도록 설정
- 10~11행: <시간 설정> 라디오버튼을 클릭하면 타임피커만 보이도록 설정
<예약 시작> 클릭하면 크로노미터가 시작하고, <예약완료> 클릭하면 크로노미터 정지하도록, 클릭 이벤트 리스너를 작성해보자. 
- 3행: 크로노미터를 0으로 초기화한다.
.setBase(SystemClock.elapsedRealtime());
<예약시작>을 클릭할 때마다 초기화되게 한다.
- 4,11행: 크로노미터를 시작, 정지한다.
- 5,12행: 타이머가 시작되면 글자가 빨간색으로, 정지되면 파란색으로 보이도록 설정한다.
- 15~22행: 캘린더뷰를 설정하면 선택한 연, 월, 일이 전역변수에 대입된다. 월은 0부터 시작하므로 1을 더해주었다.
캘린더뷰에서 설정한 연, 월, 일과 타임피커에서 설정한 시, 분이 맨 아래 텍스트뷰에 채워지게 해보자. 
- 1~3행: 캘린더뷰에서 선택한 연,월,일을 해당하는 텍스트뷰에 채운다.
- 5~6행: 타임시커에서 설정한 시간과 분을 구하여 해당하는 텍스트뷰에 채운다.
🎨 자동완성텍스트뷰 & 멀티 자동완성텍스트뷰 
- 사용자가 단어의 일부만 입력해도 자동완성됨
- 자동완성텍스트뷰: 단어 1개 자동완성
- 멀티자동완성텍스트뷰: 쉼표로 구분하여 여러 개의 단어가 자동완성
- 자동완성 단어는 주로 Java 코드에서 배열로 설정하며
setAdapter() 메서드를 사용한다. 
🍧 completionHint 속성
🍧 completionThreshold 속성
- 위의 5행: 몇 글자를 입력했을 때 목록을 보여줄 것인지를 지정
Java 코드는 다음과 같이 작성한다. 
⭐ ArrayAdapter는 뷰와 데이터를 연결해준다.
- 4행: 자동완성될 문자열을 배열로 정의
- 6,10행: 자동완성텍스트뷰와 멀티자동완성텍스트뷰를 선언하고, id 속성을 바탕으로 위젯에 대입
- 7행:
ArrayAdapter가 자동완성텍스트뷰와 items를 연결하여, 자동완성텍스트뷰에 items 배열의 내용이 출력된다.
android.R.layout.simple_dropdown_item_1line는 목록이 출력될 모양을 결정하는데, 여기서는 simple_dropdown_item_1line 모양으로 선택했다.
- 8,13행: 7행에서 생성한 ArrayAdapter를 자동완성텍스트뷰와 멀티자동완성텍스트뷰에 설정한다.
- 11행:
MultiAutoCompleteTextView.CommaTokenizer() : 쉼표로 구분하기 위한 멀티자동완성텍스트뷰 객체 생성
- 12행: 멀티자동완성텍스트뷰에 쉼표구분객체를 설정
🍪 MultiAutoCompleteTextView.CommaTokenizer()
: 쉼표로 구분하기 위한 멀티자동완성텍스트뷰 객체 생성
ProgressBar & SeekBar, RatingBar 
- 모두 진행상태를 표시하는 기능
Java 코드와 연동되어야 의미가 있다.
🎨 ProgressBar 
- 작업의 진행상태를 바(Bar) or 원 형태로 제공
- 바(Bar)형태 → 어느정도 진행되었는지를 확인 가능
- 원 형태 → 현재 진행 중이라는 상태만 보여줌
🍧 주로 사용되는 XML 속성
max : 범위 지정
progress : 시작 지점을 지정
secondaryProgress : 두번째 ProgressBar를 지정
🎨 SeekBar 
- ProgressBar의 하위 클래스
- ProgressBar와 대부분 비슷
- 사용자가 터치로 임의 조절이 가능
- 음량을 조절하거나 동영상 재생 시 사용자가 재생 위치를 지정하는 용도로 사용 가능
🎨 RatingBar 
- 진행 상태를 별 모양으로 표시
- ProgressBar의 하위 클래스
- ProgressBar와 사용법 비슷
- 서적, 음악, 영화 등에 대한 선호도를 나타낼 때 주로 사용
🍧 주로 사용되는 XML 속성
numStars : 별의 개수 지정
rating : 초깃값을 지정
stepSize : 한 번에 채워지는 개수를 지정

- 3행: ProgressBar의 모양을 바(Bar) 형태로 지정,
이 스타일을 생략하면 원 모양으로 나타난다.
- 4~5행: ProgressBar의 범위를 최대 100으로 설정하고, 초깃값을 20으로 설정한다.
- ProgressBar의 secondaryProgress 초깃값을 50으로 설정한다. (메인 Progress보다 흐리게 표시된다.)
- 10행: RatingBar의 별 개수를 5개로 지정
- 11행: RatingBar의 초깃값을 1.5로 지정
- 12행: RatingBar의 한 step 크기를 0.5로 지정,
이 경우에는 별이 5개이므로 총 10번의 step으로 구성된다.