activity.main_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="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Chronometer
android:id="@+id/chronometer1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:format="예약에 걸린 시간 %s"
android:gravity="center"
android:textSize="20dp" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
<Button
android:id="@+id/btnStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="예약 시작" />
</LinearLayout>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/rdoCal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="날짜 설정 (캘린더 뷰)" />
<RadioButton
android:id="@+id/rdoTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="시간 설정" />
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CalendarView
android:id="@+id/calendarView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:showWeekNumber="false" />
<TimePicker
android:id="@+id/timePicker1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#CCCCCC"
android:orientation="horizontal">
<Button
android:id="@+id/btnEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="예약완료" />
<TextView
android:id="@+id/tvYear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0000" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="년" />
<TextView
android:id="@+id/tvMonth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="월" />
<TextView
android:id="@+id/tvDay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="일" />
<TextView
android:id="@+id/tvHour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="시" />
<TextView
android:id="@+id/tvMinute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="분 예약됨" />
</LinearLayout>
</LinearLayout>
MainActivity.java
package com.example.a231004_a;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.Chronometer;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.TimePicker;
public class MainActivity extends AppCompatActivity {
Chronometer chrono; // 타이머로 사용할 변수
Button btnStart, btnEnd; // 예약시작과 예약완료 변수
RadioButton rdoCal, rdoTime; //라디오버튼 2개
CalendarView calView; // 날짜를 설정할 캘린더뷰 변수
TimePicker tPicker; // 시간 설정 타임피커 변수
TextView tvYear, tvMonth, tvDay, tvHour, tvMinute; // 맨 아래에 출력될 연,월,일,시,분 텍스트 뷰 변수
int selectYear, selectMonth, selectDay; // 캘린더뷰에서 선택할 연,월,일에 해당하는 변수
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("시간 예약");
btnStart = findViewById(R.id.btnStart);
btnEnd = findViewById(R.id.btnEnd);
chrono = findViewById(R.id.chronometer1);
rdoCal = findViewById(R.id.rdoCal);
rdoTime = findViewById(R.id.rdoTime);
tPicker = findViewById(R.id.timePicker1);
calView = findViewById(R.id.calendarView1);
tvYear = findViewById(R.id.tvYear);
tvMonth = findViewById(R.id.tvMonth);
tvDay = findViewById(R.id.tvDay);
tvHour = findViewById(R.id.tvHour);
tvMinute = findViewById(R.id.tvMinute);
// 위젯 변수 12개에 위젯을 대입
tPicker.setVisibility(View.INVISIBLE);
calView.setVisibility(View.INVISIBLE);
// 타임피커와 캘린더뷰가 보이지 않게 설정
rdoCal.setOnClickListener(v -> {
{
tPicker.setVisibility(View.INVISIBLE);
calView.setVisibility(View.VISIBLE);
// 날짜 설정 라디오버튼을 클릭하면 캘린더뷰만 보이도록 설정
}
});
rdoTime.setOnClickListener(v -> {
{
tPicker.setVisibility(View.VISIBLE);
calView.setVisibility(View.INVISIBLE);
// 시간 설정 라디오버튼을 클릭하면 타임피커만 보이게 설정
}
});
btnStart.setOnClickListener(v -> {
chrono.setBase(SystemClock.elapsedRealtime());
// 예약 시작을 클릭할 때마다 초기화되게 함
chrono.start();
chrono.setTextColor(Color.RED);
// 타이머가 시작되면 빨간색 글씨
});
btnEnd.setOnClickListener(v -> {
chrono.stop();
chrono.setTextColor(Color.BLUE);
// 타이머가 정지되면 파란색 글씨
tvYear.setText(Integer.toString(selectYear));
tvMonth.setText(Integer.toString(selectMonth));
tvDay.setText(Integer.toString(selectDay));
// 캘린더뷰에서 선택한 연,월,일을 해당하는 텍스트뷰에 채움
tvHour.setText(Integer.toString(tPicker.getCurrentHour()));
tvMinute.setText(Integer.toString(tPicker.getCurrentMinute()));
// 타임피커에서 설정한 시간과 분을 구하여 해당하는 텍스트뷰에 채움
});
calView.setOnDateChangeListener((view, year, month, dayOfMonth) -> {
selectYear = year;
selectMonth = month + 1; // 월은 0부터 시작하므로 1을 더해줌
selectDay = dayOfMonth;
});
}
}