activity_main.xml 은 다음과 같다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity"
tools:layout_editor_absoluteX="2dp"
tools:layout_editor_absoluteY="1dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:layout_editor_absoluteX="2dp"
tools:layout_editor_absoluteY="1dp">
<TextView
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SIgn In"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.15" />
<EditText
android:id="@+id/editTextTextPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.55"
tools:layout_editor_absoluteX="102dp" />
<EditText
android:id="@+id/editTextTextEmailAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textEmailAddress"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.42"
tools:layout_editor_absoluteX="101dp" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email"
app:layout_constraintStart_toStartOf="@+id/editTextTextEmailAddress"
tools:layout_editor_absoluteY="269dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="password"
app:layout_constraintStart_toStartOf="@+id/editTextTextPassword"
tools:layout_editor_absoluteY="359dp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="신규가입"
android:textSize="12sp"
tools:layout_editor_absoluteX="159dp"
tools:layout_editor_absoluteY="544dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SIgn In"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.15" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="로그인하기"
tools:layout_editor_absoluteX="148dp"
tools:layout_editor_absoluteY="475dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
activity_calander.xml의 내용은 다음과 같다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
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="horizontal">
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="예약시작"
android:textColor="#FFFFFF"
android:background="#000000"
android:textSize="18dp" />
<Chronometer
android:id="@+id/chronmeter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:format="예약에 걸린 시간 -%s"
android:gravity="center"
android:textSize="20dp" />
</LinearLayout>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/rBtnCalendar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="날짜 설정 (캘린더)"/>
<RadioButton
android:id="@+id/rBtnTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="시간 설정 (시계형)"/>
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<CalendarView
android:id="@+id/calendarView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:showWeekNumber="false" />
<TimePicker
android:id="@+id/timerPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner" />
</FrameLayout>
</LinearLayout>
<Button
android:id="@+id/btnEnd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="예약완료"
android:textSize="18dp"
android:background="#FFFFFF"
android:textColor="#000000"/>
</LinearLayout>
MainActivity.java의 내용은 다음과 같다.
package com.example.littleairbnb;
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.RadioButton;
import android.widget.TimePicker;
import android.widget.Chronometer;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Chronometer chrono;
Button btnStart,btnEnd;
RadioButton rBtnCalendar, rBtnTime;
CalendarView calView;
TimePicker tPicker;
int selectYear, selectMonth, selectDay;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button) findViewById(R.id.btnStart);
btnEnd = (Button) findViewById(R.id.btnEnd);
chrono = (Chronometer) findViewById(R.id.chronometer);
rBtnCalendar = (RadioButton) findViewById(R.id.rBtnCalendar);
rBtnTime = (RadioButton) findViewById(R.id.rBtnTime);
tPicker = (TimePicker) findViewById(R.id.timePicker);
calView = (CalendarView) findViewById(R.id.calendarView);
tPicker.setVisibility(View.INVISIBLE);
calView.setVisibility(View.INVISIBLE);
rBtnCalendar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calView.setVisibility(View.INVISIBLE);
tPicker.setVisibility(View.VISIBLE);
}
});
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chrono.setBase(SystemClock.elapsedRealtime());
chrono.start();
chrono.setTextColor(Color.RED);
}
});
btnEnd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chrono.stop();
chrono.setTextColor(Color.BLUE);
Toast.makeText(getApplicationContext(),
Integer.toString(selectYear) + "년" +
Integer.toString(selectMonth) + "월" +
Integer.toString(selectDay) + "일" +
Integer.toString(tPicker.getCurrentHour()) + "시" +
Integer.toString(tPicker.getCurrentMinute()) + "분 저장됨"
, Toast.LENGTH_LONG).show();
}
});
calView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
selectYear = year;
selectMonth = month + 1;
selectDay = dayOfMonth;
}
});
}
}
에러 이슈:
An issue was found when checking AAR metadata:Dependency 'androidx.activity:activity:1.8.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Recommended action: Update this project to use a newer compileSdk
가 발생했다. 내가 해결한 방법은 다음과 같다.
build.gradle.kts (:app)파일(위치: gradle scripts 아래)에서 compileSdk와 targetSdk를 34로 변경하면 된다. 프로젝트의 compileSdk 버전이 현재 사용 중인 androidx.activity:activity:1.8.0 라이브러리의 요구사항을 충족시키지 못하고 있어서 발생한 문제이므로 버전을 바꿔주면 해결된다.
결과:
날짜와 시간을 선택해서 예약을 할 수 있는 어플리케이션 완성
'프로젝트' 카테고리의 다른 글
3d resnet 도전기 (1) | 2024.07.18 |
---|---|
[kotlin, 앱 만들기] 타이머 (0) | 2023.11.23 |
[TensorFlow] 개 고양이 분류기 만들기 (1) | 2023.11.14 |
(TensorFlow) 의류 이미지 분류 (0) | 2023.10.31 |
주택 노후도와 범죄율간 상관관계 분석 및 사업제안 (0) | 2023.09.18 |