크로노미터
타이머 형식의 위젯이며 일반적으로 시간을 측정할 때 많이 사용합니다.
<Chronometer
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/chronometer"
android:textSize="30sp"
android:gravity="center"
android:format="시간 측정 [ %s ]" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnStart"
android:text="START"
android:textSize="20sp"
android:layout_marginTop="5dp" />
Chronometer 위젯에 gravity 속성으로 중앙으로 위치를 바꿔주고 필수적인 format 속성을 주어 %s 포맷으로 출력되도록 하였습니다.
public class MainActivity extends AppCompatActivity {
Chronometer chronometer;
Button btnStart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chronometer = findViewById(R.id.chrono);
btnStart = findViewById(R.id.btnStart);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// START 버튼 클릭 시 Button 텍스트로 판별
if(btnStart.getText().equals("START")) {
// START 버튼 클릭 시 크로노미터의 시각을 0분 0초로 초기화
chronometer.setBase(SystemClock.elapsedRealtime());
// Chronometer의 start() 메서드를 호출하여 타이머 가동
chronometer.start();
chronometer.setTextColor(Color.BLACK);
btnStart.setText("STOP");
} else {
btnStart.setText("START");
chronometer.setTextColor(Color.BLUE);
}
}
});
}
}
btnStart의 Text로 판별하여 시작과 정지를 구분하고 START 버튼 클릭 시 시각을 0분 0초로 초기화하고 타이머를 가동합니다. 정확히 구분하기 위하여 텍스트의 색상을 변경했고 다시 버튼의 Text를 토글 형식으로 문구를 변경합니다.
타임피커
시간을 선택할 수 있는 위젯입니다.
타임피커의 2가지 모드 중 친숙한 spinner 모드
타임피커의 2가지 모드 중 clock 모드 (좌측 하단 키보드 모양의 아이콘 클릭 시 spinner 모드 처럼 직접 입력 가능)
<?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="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TimePicker
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/timePicker"
android:timePickerMode="spinner" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnPick"
android:text="설정 완료" />
</LinearLayout>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TimePicker tPicker = findViewById(R.id.timePicker);
Button btnPick = findViewById(R.id.btnPick);
btnPick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 안드로이드 API 23 Level(Mashmellow) 부터 사용 가능한 코드
// int hour = tPicker.getHour();
// int min = tPicker.getMinute();
// API 23 Level 이전의 코드에서 사용 시
int hour = tPicker.getCurrentHour();
int min = tPicker.getCurrentMinute();
Toast.makeText(MainActivity.this, hour + "시 " + min + "분", Toast.LENGTH_SHORT).show();
}
});
}
}
데이트피커
날짜를 선택할 수 있는 위젯입니다.
데이트피커의 2가지 모드 중 spinner 모드로 선택하면 위 처럼 spinner와 calendar가 함께 나오고 생략하거나 calendar를 입력하면 calendar 모드만 적용됩니다.
<DatePicker
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dPicker"
android:datePickerMode="calendar" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnPick"
android:text="설정 완료"
android:textSize="20sp" />
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final DatePicker dPicker = findViewById(R.id.dPicker);
Button btnPick = findViewById(R.id.btnPick);
btnPick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int year = dPicker.getYear();
int month = dPicker.getMonth() + 1; // 0~11월을 사용하므로 +1 필요
int day = dPicker.getDayOfMonth();
Toast.makeText(MainActivity.this, year + "년 " + month + "월 " + day + "일", Toast.LENGTH_SHORT).show();
}
});
}
}
캘린더뷰
데이트피커와 마찬가지로 날짜를 선택할 수 있는 위젯입니다.
<CalendarView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cPicker" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnPick"
android:text="설정 완료"
android:textSize="20sp" />
public class MainActivity extends AppCompatActivity {
int selectedYear, selectedMonth, selectedDay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final CalendarView cPicker = findViewById(R.id.cPicker);
Button btnPick = findViewById(R.id.btnPick);
// CalendarView 날짜 변경 시 동작하는 이벤트
cPicker.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
// OnClick 이벤트에서 사용하기 위해 저장
selectedYear = year;
selectedMonth = month + 1; // 0~11월을 사용하므로 +1 필요
selectedDay = dayOfMonth;
}
});
btnPick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(selectedYear == 0) {
Toast.makeText(MainActivity.this, "날짜를 선택해주세요.", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(MainActivity.this, selectedYear + "년 " + selectedMonth + "월 " + selectedDay + "일", Toast.LENGTH_SHORT).show();
}
});
}
}
다른 이벤트(OnClick)에서 사용해주기 위해 OnDateChange 이벤트에서 변수에 저장해주어 사용합니다.
'BackEnd > Android' 카테고리의 다른 글
기타 위젯 (0) | 2020.06.17 |
---|---|
간단한 예약 프로그램 구현하기 (0) | 2020.06.17 |
그리드 레이아웃으로 계산기 구현하기 (0) | 2020.06.16 |
for문의 초기변수를 내부에서 사용하는 방법 (0) | 2020.06.16 |
레이아웃 (0) | 2020.06.12 |