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(); 사용해서 입력 받을 수 있음.
'모바일 > android' 카테고리의 다른 글
[안드로이드프로그래밍6판] 6장 직접 풀어보기 6-2, 직접 풀어보기 6-3, 실습 6-2 / 뷰플리퍼, 탭호스트 (0) | 2021.10.18 |
---|---|
[안드로이드프로그래밍6판] 6장 자동완성 텍스트뷰(고대로 베껴 봄) (0) | 2021.10.17 |
[안드로이드프로그래밍6판] 5장 실습 5-2, 직접 풀어보기 5-5 (0) | 2021.10.16 |
[안드로이드프로그래밍6판] 5장 직접 풀어보기 5-4 (0) | 2021.10.16 |
[안드로이드프로그래밍6판] 5장 직접 풀어보기 5-2, 실습 5-1 (0) | 2021.10.16 |