ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안드로이드 프로그래밍 page 243 실습 6-1 날짜/시간 예약 앱 만들기
    모바일 프로그래밍 2023. 10. 10. 23:19

    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;
            });
    
        }
    
    
    
    }

    '모바일 프로그래밍' 카테고리의 다른 글

    모바일 프로그래밍 1장 요약  (1) 2023.10.11
    기본적인 애플리케이션 작성  (0) 2023.10.10
Designed by Tistory.