자바 웹 개발자가 될거야/JAVA

[Android] 안드로이드 날짜, 시간 예약 설정

whitz 2021. 12. 22. 11:30

- 예약시작 버튼을 누르고 날짜 설정을 클릭하면 달력이 나오도록, 시간 설정을 클릭하면 시계가 나오도록 구현

- 예약완료 버튼을 누르면 예약 설정한 날짜와 시간을 한꺼번에 보여주고 예약에 걸린 시간을 측정해주도록 구현

 

① .xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Chronometer
        android:id="@+id/cm1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:format="예약에 걸린 시간 : %s"
        android:textSize="20dp"
        android:layout_gravity="center"/>
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="예약 시작" />

    <RadioGroup
        android:id="@+id/rg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/rb1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="날짜 설정"/>
        <RadioButton
            android:id="@+id/rb2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="시간 설정"/>

    </RadioGroup>

    <FrameLayout
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TimePicker
            android:id="@+id/tp1"
            android:visibility="invisible"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:timePickerMode="spinner"/>

        <CalendarView
            android:id="@+id/cv1"
            android:visibility="visible"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>


    </FrameLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="예약완료"/>

        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0000년00월00일 00시 00분 00초"
            />

    </LinearLayout>

</LinearLayout>

 

 

② .java

 

- .xml에서 각 객체에 설정한 id들을 findViewById로 들고와줌

 

 btn1.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		cm1.start();
	}
});

- 예약시작 버튼을 누르면 Chronometer 작동되도록 설정

 

rb1.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		cv1.setVisibility(View.VISIBLE);
		tp1.setVisibility(View.INVISIBLE);
	}
});

rb2.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		cv1.setVisibility(View.INVISIBLE);
		tp1.setVisibility(View.VISIBLE);
	}
});

 

- 날짜 설정 라디오버튼을 누르면 캘린더뷰가 등장하고 타임피커는 안보이게 설정

- 시간 설정 라디오버튼을 누르면 타임피커가 등장하고 캘린더뷰는 안보이게 설정

 

 

cv1.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
	@Override
	public void onSelectedDayChange(@NonNull CalendarView calendarView, int year, int month, int dayOfMonth) {
		selectYear = year;
		selectMonth = month+1;
		selectDay = dayOfMonth;
		Log.i("mytag",selectYear+" "+selectMonth+" "+selectDay);
	}
});
tp1.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
	@Override
	public void onTimeChanged(TimePicker timePicker, int hour, int min) {
		selectHour = hour;
		selectMin = min;
		Log.i("mytag",selectHour+" "+selectMin);        
	}
});

 

- 날짜와 시간이 변하면 그 값을 매개변수로 가져옴

- select XXX 변수는 MainActivity 클래스에 선언해줌

- Logcat 함수를 통해서 사용자가 선택한 날짜나 시간값 기억함

 

시간 Logcat값

 

 

btn2.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		cm1.stop();
		tv1.setText(selectYear+"년 "+selectMonth+"월 "+selectDay+"일 "+selectHour+"시 "+selectMin+"분");
	}
});

 

- 예약완료 버튼을 누르면 TextView에 예약 설정한 날짜와 시간을 보여줌