Android 中的時間日期控制元件
阿新 • • 發佈:2019-01-08
TextClock
以字串的形式顯示當前時間
更多方法及屬性請檢視官方API
API17+
在佈局檔案中新增
<TextClock
android:id="@+id/textClock"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
TextClock的XML屬性:
- android:format12Hour 指定用於在12小時模式下顯示時間和/或日期
- android:format24Hour 指定用於在24小時模式下顯示時間和/或日期
- android:timeZone 指定要使用的時區
DatePicker
提供一個選擇日期的視窗小部件
更多方法及屬性請檢視官方API
獲取系統日期和時間的方法
// 獲取日曆物件 Calendar calendar = Calendar.getInstance(); // 獲取當前對應的年、月、日的資訊 year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH) + 1; day = calendar.get(Calendar.DAY_OF_MONTH); // 獲取當前時間資訊 hour=calendar.get(Calendar.HOUR_OF_DAY); minute=calendar.get(Calendar.MINUTE);
在佈局檔案中新增
<DatePicker
android:id="@+id/dp_pro"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner" />
XML屬性:
- android:calendarTextColor 日曆列表中的文字顏色。
- android:calendarViewShown=”true|fase” 設定該DatePicker是否顯示CalendarView元件,只對spinner
- android:datePickerMode=”calendar|spinner” 定義DatePicker小部件的外觀,該屬性在API21之後新增
- android:dayOfWeekBackground 日期的背景色
- android:dayOfWeekTextAppearance 日期的文字顏色
- android:firstDayOfWeek=”integer” 基於日曆的一週第一天
- android:headerBackground 表頭選擇的日期的背景
- android:headerDayOfMonthTextAppearance 表頭天的文字外觀
- android:headerMonthTextAppearance 表頭月的文字外觀
- android:headerYearTextAppearance 表頭年的文字外觀
- android:maxDate=”string using \\” 通過以mm / dd / yyyy格式此日曆檢視中顯示的最大的日期。
- android:minDate=”string using \\” 通過以mm / dd / yyyy格式此日曆檢視中示出的最小的日期。
- android:spinnersShown=”true|false” 設定該日期選擇器是否顯示Spinner日期選擇元件,只在spinner模式下有效
- android:startYear=”integer” 設定日期選擇器允許選擇的第一年,如“1940年”。
- android:endYear=”integer” 設定日期選擇器允許選擇的最後一年。
- android:yearListItemTextAppearance 列表中年的文字外觀
- android:yearListSelectorColor 列表中年的選擇圓圈的顏色
程式碼中:
//1.findViewById
DatePicker datePicker = (DatePicker) findViewById(R.id.dp_pro);
//2.使用init()方法初始化DatePicker在重新整理Spinner之前顯示的日期;並設定OnDateChangedListener,監聽器可以為空。這裡使用activity implements OnDateChangedListener
datePicker.init(year,monthOfYear,dayOfMonth,this);
//設定OnDateChangedListener後重寫的方法,修改DatePicker裡的年、月、日時觸發
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (view.getId()==R.id.dp_pro){
datePro=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" ";//這裡月份值+1,因為獲取的月份值比正常月份值小1
tvTimePro.setText(datePro+timePro);
Log.d(TAG, "onDateChanged: "+datePro);
}else if (view.getId()==R.id.dp_custom){
dateCustom=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" ";
tvTimeCustom.setText(dateCustom+timeCustom);
Log.d(TAG, "onDateChanged: "+dateCustom);
}
}
另外DatePicker支援直接輸入日期值(長按就可以,僅限於在spinner模式下)
TimePicker
提供一個選擇時間的視窗小部件
更多方法及屬性請檢視官方API
在佈局檔案中新增
<TimePicker
android:id="@+id/tp_custom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner" />
TimePicker的XML屬性:
- android:timePickerMode=”spinner|clock” TimePicker顯示樣式,分別對應spinner樣式和時鐘樣式
程式碼中:
timePicker_custom = (TimePicker) findViewById(R.id.tp_custom);
//24小時制
timePicker_custom.setIs24HourView(true);
//為timePicker新增監聽器,不可為空。修改TimePicker裡的時、分時觸發
timePicker_custom.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
timeCustom=hourOfDay+":"+minute;
tvTimeCustom.setText(dateCustom+timeCustom);
Log.d(TAG, "onTimeChanged: "+timeCustom);
}
});
TimePicker也支援直接輸入日期值(長按就可以,僅限於在spinner模式下)
Chronometer
Class that implements a simple timer
更多方法及屬性請檢視官方API
在佈局檔案中新增
Chronometer的XML屬性:
- android:countDown=”true|false” 指定此計時器是否倒計時或從基數計數
- android:format=”string” 格式字串:如果指定,計時器將顯示此字串,第一個“%s”由“MM:SS”或“H:MM:SS”形式的當前定時器值替換
程式碼中:
Chronometer chron= (Chronometer) findViewById(R.id.chron);
//設定遞增定時器參考的時間為系統時鐘過去實時時間
chron.setBase(SystemClock.elapsedRealtime());
chron.start();
//設定當計時器更改時要呼叫的偵聽器
chron.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
//action
}
});
ToggleButton tbn_chro = (ToggleButton) findViewById(R.id.tbn_chro);
tbn_chro.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// 開始計數。 這不影響從setBase(long)設定的基數,只是檢視顯示。
// 計時器通過定期將訊息排程到處理程式,即使Widget不可見。 為了確保不會發生資源洩漏,
// 使用者應確保每個start()呼叫都具有對stop()的相互呼叫。
chron.start();
} else {
// 停止計數。這不影響從setBase(long)設定的基數,只是檢視顯示。
// 這將停止向處理程式傳送的訊息,通過start()有效地釋放將按照計時器執行的資源。
chron.stop();
}
}
});
CalendarView
CalendarView是用於顯示和選擇日期的日曆小部件。此日曆支援的日期範圍是可配置的
在佈局檔案中新增
<CalendarView
android:id="@+id/cal_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
CalendarView的XML屬性
- android:dateTextAppearance calendar中天數的文字外觀
- android:firstDayOfWeek=”integer” 基於日曆的一週第一天
- android:maxDate=”string using \\” 通過以mm / dd / yyyy格式此日曆檢視中顯示的最大的日期。
- android:minDate=”string using \\” 通過以mm / dd / yyyy格式此日曆檢視中示出的最小的日期。
程式碼中:
CalendarView cal = (CalendarView) findViewById(R.id.cal_view);
cal.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
//action
}
});
DatePickerDialog和TimePickerDialog
與DatePicker和TimePicker的區別在於DatePicker和TimePicker是顯示在螢幕畫面上的,而DatePickerDialog和TimePickerDialog物件則是以彈出Dialog的方式來顯示
使用方法
new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Toast.makeText(MainActivity.this, "DatePickerDialog "+year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();
}
}, year, month, day).show();
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(MainActivity.this, "TimePickerDialog " + hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();
}
}, hour, minute, true).show();
其他Picker之NumberPicker
用於數字選擇
在佈局檔案中新增:
<NumberPicker
android:id="@+id/num_pick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
程式碼中:
NumberPicker numberPicker= (NumberPicker) findViewById(R.id.num_pick);
// 設定NumberPicker屬性
numberPicker.setMinValue(minNum);
numberPicker.setMaxValue(maxNum);
numberPicker.setValue(currentNum);
// 監聽數值改變事件
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
currentNum = newVal;
Toast.makeText(MainActivity.this, "currentNum= "+currentNum, Toast.LENGTH_SHORT).show();
}
});