Android Studio를 활용한 안드로이드 프로그래밍 P249 직접 풀어보기 6-1
다음과 같이 작동하는 프로그램을 작성하시오.
데이트피커를 사용->날짜 설정
크로노미터클릭 시 ->라디오버튼 보이도록설정, 데이트피커,타임피커 보이게 설정
맨 아래 텍스트뷰의 연도("0000"년) 길게 클릭 시-> 라디오버튼,데이트피커,타임피커 사라지게 설정+
설정한 년도/월/일/시/분 출력
1. 크로노 클릭 후 보여지는 라디오버튼(날짜 설정)
2. 크로노 클릭 후 보여지는 라디오버튼(시간 설정)
3. TextView "0000"년 롱 클릭 시 나타나는 화면
*5월 19일이 나와야합니다.(실수)
XML코드
크로노랑 텍스트뷰도 클릭이 된다는 점을 처음 이용해봤습니다.
데이트피커, 타임피커를 출력할 때 위와 같은 화면을 띄우기 위해
android:timePickerMode="spinner"
android:datePickerMode="spinner"를 작성해야합니다.
(위와 같은 화면은 롤리팝 버전 까지 통용되므로 이러한 별도의 코드를 작성해야합니다.)
<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">
<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/ch1"
android:format="예약에 걸린 시간: %s"
android:gravity="center"
android:textSize="20dp"/>
</LinearLayout>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rdoCal"
android:text="날짜 설정"/>
<RadioButton
android:layout_width="match_parent"
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">
<DatePicker
android:datePickerMode="spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/datePicker1" />
<TimePicker
android:timePickerMode="spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/timePicker1"/>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#CCCCCC"
android:orientation="horizontal">
<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="분"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="예약됨"/>
</LinearLayout>
</LinearLayout>
MainActivity
데이트피커에서 월은 0부터 시작하므로 +1해주어야합니다.
연도를 롱클릭 할 때의 리스너함수만 잘 작성하면 될 것 같습니다.
package com.example.practice6_1;
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.DatePicker;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.DatePicker;
import org.w3c.dom.Text;
import java.sql.Time;
public class MainActivity extends AppCompatActivity {
Chronometer chrono;
Button btnStart, btnEnd;
RadioButton rdoCal, rdoTime;
DatePicker dpicker;
TimePicker timePicker;
TextView tvYear, tvMonth, tvDay, tvHour, tvMinute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("시간 예약(수정)");
chrono = (Chronometer) findViewById(R.id.ch1);
rdoCal = (RadioButton) findViewById(R.id.rdoCal);
rdoTime = (RadioButton) findViewById(R.id.rdoTime);
dpicker=(DatePicker)findViewById(R.id.datePicker1);
timePicker = (TimePicker) findViewById(R.id.timePicker1);
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);
timePicker.setVisibility(View.INVISIBLE);
dpicker.setVisibility(View.INVISIBLE);
rdoCal.setVisibility(View.INVISIBLE);
rdoTime.setVisibility(View.INVISIBLE);
chrono.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rdoCal.setVisibility(View.VISIBLE);
rdoTime.setVisibility(View.VISIBLE);
}
});
rdoCal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timePicker.setVisibility(View.INVISIBLE);
dpicker.setVisibility(View.VISIBLE);
}
});
rdoTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timePicker.setVisibility(View.VISIBLE);
dpicker.setVisibility(View.INVISIBLE);
}
});
chrono.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
chrono.setBase(SystemClock.elapsedRealtime());
chrono.start();
chrono.setTextColor(Color.RED);
rdoCal.setVisibility(View.VISIBLE);
rdoTime.setVisibility(View.VISIBLE);
}
});
tvYear.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
chrono.stop();
chrono.setTextColor(Color.BLUE);
tvYear.setText(Integer.toString(dpicker.getYear()));
tvMonth.setText(Integer.toString(1+dpicker.getMonth()));
tvDay.setText(Integer.toString(dpicker.getDayOfMonth()));
tvHour.setText(Integer.toString(timePicker.getCurrentHour()));
tvMinute.setText(Integer.toString(timePicker.getCurrentMinute()));
rdoCal.setVisibility(View.INVISIBLE);
rdoTime.setVisibility(View.INVISIBLE);
dpicker.setVisibility(View.INVISIBLE);
timePicker.setVisibility(View.INVISIBLE);
return false;
}
});
}
}
'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글
직접 풀어보기 6-3 (5) | 2020.05.11 |
---|---|
직접 풀어보기 6-2 (2) | 2020.05.04 |
직접 풀어보기 5-5 (0) | 2020.05.03 |
직접 풀어보기 5-4 (0) | 2020.05.03 |
직접 풀어보기 5-3 (0) | 2020.05.03 |