프로그래밍

[안드로이드 자바] 타임피커, 캘린더뷰를 이용한 예약 시스템 만들기(Chronometer, Timpicker, CalendarView) 본문

안드로이드/안드로이드 스튜디오

[안드로이드 자바] 타임피커, 캘린더뷰를 이용한 예약 시스템 만들기(Chronometer, Timpicker, CalendarView)

시케 2022. 5. 17. 10:42
728x90
반응형

디자인

 

프로젝트 설명

TimePicker를 이용한 예약 프로그램

예약 시작을 누르면 타이머(Chronometer)가 붉은색으로 변하며 시작된다

날짜선택/시간선택을 라디오버튼을 이용하여 각 캘린더뷰, 스피너 이용

예약완료를 누를시 예약이 종료되며 시간을 나타냄

 

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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <Chronometer
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/Chrono"
            android:format="예약 소요 시간 : %s"
            android:textSize="20dp"
            android:gravity="center"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/BtnStart"
            android:text="예약시작"/>
    </LinearLayout>

    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RdoCal"
            android:text="날짜선택"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RdoTime"
            android:text="시간선택"/>
    </RadioGroup>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <CalendarView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/CalView"/>
            <TimePicker
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:timePickerMode="spinner"
                android:id="@+id/TPicker"/>
        </FrameLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#cccccc">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/BtnEnd"
            android:text="예약완료"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/TvYear"
            android:text=" 0000"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="년"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/TvMonth"
            android:text=" 00"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="월"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/TvDay"
            android:text=" 00"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="일"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/TvHour"
            android:text=" 00"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="시"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/TvMinute"
            android:text=" 00"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="분에 예약된"/>
    </LinearLayout>

</LinearLayout>

 

java

package com.example.timepicker;

import androidx.annotation.NonNull;
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;
    CalendarView calView;
    TimePicker tPicker;
    TextView tvYear, tvMonth, tvDay, tvHour, tvMinute;

    int sYear, sMonth, sDay;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("시간 예약");

        chrono = (Chronometer)findViewById(R.id.Chrono);
        btnStart = (Button)findViewById(R.id.BtnStart);
        btnEnd = (Button)findViewById(R.id.BtnEnd);
        rdoCal = (RadioButton)findViewById(R.id.RdoCal);
        rdoTime = (RadioButton)findViewById(R.id.RdoTime);
        calView = (CalendarView)findViewById(R.id.CalView);
        tPicker = (TimePicker)findViewById(R.id.TPicker);
        tvYear = (TextView)findViewById(R.id.TvYear);
        tvMonth = (TextView)findViewById(R.id.TvMonth);
        tvDay = (TextView)findViewById(R.id.TvDay);
        tvHour = (TextView)findViewById(R.id.TvHour);
        tvMinute = (TextView)findViewById(R.id.TvMinute);

        calView.setVisibility(View.INVISIBLE);
        tPicker.setVisibility(View.INVISIBLE);

        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chrono.setBase(SystemClock.elapsedRealtime());
                chrono.start();
                chrono.setTextColor(Color.RED);
            }
        });

        rdoCal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calView.setVisibility(View.VISIBLE);
                tPicker.setVisibility(View.INVISIBLE);
            }
        });

        rdoTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calView.setVisibility(View.INVISIBLE);
                tPicker.setVisibility(View.VISIBLE);
            }
        });

        calView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
                sYear = year;
                sMonth = month+1;
                sDay = dayOfMonth;
            }
        });

        btnEnd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chrono.stop();
                chrono.setTextColor(Color.BLUE);

                tvYear.setText(Integer.toString(sYear));
                tvMonth.setText(Integer.toString(sMonth));
                tvDay.setText(Integer.toString(sDay));
                tvHour.setText(Integer.toString(tPicker.getCurrentHour()));
                tvMinute.setText(Integer.toString(tPicker.getCurrentMinute()));
            }
        });

    }
}
728x90
반응형
Comments