날짜/시간 관련 위젯 + 기타 위젯

이수민·2022년 10월 16일
post-thumbnail

🎨 아날로그, 디지털 시계

  • 화면에 시간을 표시하는 위젯
  • 시계를 표현하는 용도
  • View 클래스에서 상속받기 떄문에 background 속성 등을 설정할 수 있다.

🎨 크로노미터(Chronometer)

  • 타이머 형식의 위젯
  • 일반적으로 시간을 측정할 때 많이 사용함
  • start(), stop(), reset() 메소드 등 사용
  • 6행: format 속성에서 타이머 앞 문자열을 지정한다.
    %s는 '분:초' 또는 '시:분:초' 형식으로 출력해준다.

🎨 타임피커, 데이트피커, 캘린더뷰

  • 타임피커(TimePicker): 시간을 표시, 조절
  • 데이트피커(DatePicker)캘린더뷰(CalendarView) : 날짜를 표시, 조절


✍🏻 날짜/시간 예약 앱 만들기

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

XML 파일을 먼저 수정해보자. 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 속성

  • 위의 4행: 목록에 힌트로 나타남

🍧 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으로 구성된다.

0개의 댓글