모바일/android

[안드로이드프로그래밍6판] 6장 실습 6-1, 직접 풀어보기 6-1

hatch 2021. 10. 17. 22:11
728x90
반응형
실습 6-1(날짜/시간 예약 앱 만들기)

** 복습 필요!! 그대로 코딩함.

 

<xml 코드>

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

    <Chronometer
        android:id="@+id/chronometer1"
        android:format="예약에 걸린 시간 %s"
        android:gravity="center"
        android:textSize="20dp"
        android:textColor="#0000FF"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/btnStart"
        android:text="예약 시작"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/rodCal"
            android:text="날짜 설정(캘린더형)"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <RadioButton
            android:id="@+id/rdoTime"
            android:text="시간 설정"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </RadioGroup>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <CalendarView
                android:id="@+id/calendarView1"
                android:showWeekNumber="false"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
            <TimePicker
                android:id="@+id/timePicker1"
                android:timePickerMode="spinner"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        </FrameLayout>
    </LinearLayout>
    <LinearLayout
        android:background="#32000000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/btnEnd"
            android:text="예약완료"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:id="@+id/tvYear"
            android:text="0000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:text="년"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:id="@+id/tvMonth"
            android:text="00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:text="월"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:id="@+id/tvDay"
            android:text="00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:text="일"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:id="@+id/tvHour"
            android:text="00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:text="시"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:id="@+id/tvMinute"
            android:text="00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:text="분"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <TextView
            android:text="예약됨"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

 

<java 코드>

package com.cookandroid.practice6_1;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
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.CompoundButton;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends AppCompatActivity {

    Chronometer Chronometer1;
    Button BtnStart, BtnEnd;
    RadioButton RdoCal, RdoTime;
    CalendarView CalenderView1;
    TimePicker TimePicker;
    TextView TVYear, TVMonth, TVDay, TVHour, TVMinute;
    int selectYear, selectMonth, selectDay;

    @SuppressLint("WrongViewCast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("시간 예약");

        Chronometer1 = findViewById(R.id.chronometer1);
        BtnStart = findViewById(R.id.btnStart);
        BtnEnd = findViewById(R.id.btnEnd);
        BtnStart = findViewById(R.id.btnStart);
        RdoCal = findViewById(R.id.rodCal);
        RdoTime = findViewById(R.id.rdoTime);
        CalenderView1 = findViewById(R.id.calendarView1);
        TimePicker = findViewById(R.id.timePicker1);
        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);

        CalenderView1.setVisibility(View.INVISIBLE);
        TimePicker.setVisibility(View.INVISIBLE);

        RdoCal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CalenderView1.setVisibility(View.VISIBLE);
                TimePicker.setVisibility(View.INVISIBLE);
            }
        });
        RdoTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CalenderView1.setVisibility(View.INVISIBLE);
                TimePicker.setVisibility(View.VISIBLE);
            }
        });

        BtnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Chronometer1.setBase(SystemClock.elapsedRealtime());
                Chronometer1.start();
                Chronometer1.setTextColor(Color.RED);
            }
        });
        BtnEnd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Chronometer1.stop();
                Chronometer1.setTextColor(Color.BLUE);

                TVYear.setText(Integer.toString(selectYear));
                TVMonth.setText(Integer.toString(selectMonth));
                TVDay.setText(Integer.toString(selectDay));

                TVHour.setText(Integer.toString(TimePicker.getCurrentHour()));
                TVMinute.setText(Integer.toString(TimePicker.getCurrentMinute()));
            }
        });
        //캘린더뷰를 클릭하면 선택한 날짜가 전역변수에 대입
        CalenderView1.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(@NonNull CalendarView calendarView, int year, int month, int dayOfMonth) {
                selectYear = year;
                selectMonth = month+1; //월은 0부터 시작하므로 +1
                selectDay = dayOfMonth;
            }
        });
    }
}

 

 

직접 풀어보기 6-1(실습 응용)

 

<xml 코드>

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <Chronometer
            android:id="@+id/Chro"
            android:gravity="center"
            android:format="예약에 걸린 시간 %s"
            android:textSize="20dp"
            android:background="#28000000"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <RadioGroup
            android:id="@+id/RGroup"
            android:visibility="invisible"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <RadioButton
                android:id="@+id/RbtnDate"
                android:text="날짜 설정"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            <RadioButton
                android:id="@+id/RbtnTime"
                android:text="시간 설정"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </RadioGroup>
    </LinearLayout>
    <LinearLayout
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <LinearLayout
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TimePicker
                android:id="@+id/TimePicker"
                android:timePickerMode="spinner"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        </LinearLayout>
        <LinearLayout
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <DatePicker
                android:id="@+id/DatePicer"
                android:datePickerMode="calendar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/TVReserve"
            android:background="#34000000"
            android:gravity="center"
            android:text="0000년00월00일00시00분예약됨"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>


</LinearLayout>

<java 코드> - 복습!

package com.cookandroid.myself6_1;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.CalendarView;
import android.widget.Chronometer;
import android.widget.DatePicker;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends AppCompatActivity {

    Chronometer chro;
    RadioGroup rGroup;
    RadioButton rBtnDate, rBtnTime;
    TimePicker tPicker;
    DatePicker dPicker;
    TextView tReserve;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        chro = findViewById(R.id.Chro);
        rGroup = findViewById(R.id.RGroup);
        rBtnDate = findViewById(R.id.RbtnDate);
        rBtnTime = findViewById(R.id.RbtnTime);
        tPicker = findViewById(R.id.TimePicker);
        dPicker = findViewById(R.id.DatePicer);
        tReserve = findViewById(R.id.TVReserve);

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

        chro.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                chro.setBase(SystemClock.elapsedRealtime());
                chro.start();
                chro.setTextColor(Color.RED);
                rGroup.setVisibility(View.VISIBLE);
            }
        });
        rBtnDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tPicker.setVisibility(View.INVISIBLE);
                dPicker.setVisibility(View.VISIBLE);
            }
        });
        rBtnTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tPicker.setVisibility(View.VISIBLE);
                dPicker.setVisibility(View.INVISIBLE);
            }
        });
        tReserve.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                chro.stop();
                chro.setTextColor(Color.BLUE);

                String dateStr = dPicker.getYear() + "년" + (dPicker.getMonth()+1) + "월"
                        + dPicker.getDayOfMonth() + "일" + tPicker.getCurrentHour() + "시"
                        + tPicker.getCurrentMinute() + "분" + "예약됨";
                tReserve.setText(dateStr);

                rGroup.setVisibility(View.INVISIBLE);
                tPicker.setVisibility(View.INVISIBLE);
                dPicker.setVisibility(View.INVISIBLE);

                return false;

            }
        });
    }
}

 

▶ 복습 개념

- 캘린더뷰 : 리스너 사용, 전역변수 선언해서 따로 체크한 값 입력 받아야 함.

- 데이트 피커 : 바로 getYear(); 사용해서 입력 받을 수 있음.