- Android Studio開發實戰:從零基礎到App上線 (移動開發叢書)
- 歐陽燊
- 914字
- 2020-11-28 17:31:45
5.1 日期時間控件
本節介紹Android的日期時間控件,主要是日期選擇對話框DatePickerDialog和時間選擇對話框TimePickerDialog的用法。
5.1.1 日期選擇器DatePicker
雖然EditText控件提供inputType="date"的日期輸入,但是很少有用戶會老老實實地手工輸入日期,況且EditText還不支持“****年**月**日”這樣的日期格式,所以都要系統提供日期控件,供用戶選擇具體的年月日,在Android中這個控件是DatePicker。不過,DatePicker并非彈窗模式,而是直接在頁面上占據一塊區域,并且不會自動關閉。按習慣來說,日期控件應該在當前頁面彈出,選擇完日期就要把控件關掉。因此,DatePicker不適合直接使用,實際開發中用的是已經封裝好的日期選擇對話框DatePickerDialog。
DatePickerDialog相當于在AlertDialog上加載了DatePicker,用起來更簡單,只需調用構造函數設置一下當前年、月、日,然后調用show方法即可彈出日期對話框。日期選擇事件由監聽器OnDateSetListener負責響應,在該監聽器實現的onDateSet方法中,開發者能夠獲得用戶選擇的具體日期,并做后續處理。這里要特別注意onDateSet方法的月份參數,該參數的起始值不是1而是0。也就是說,一月份對應的參數數值是0,十二月份對應的參數數值是11。如果實在不理解,記住這里的月份值要加1就行了。
圖5-1所示為一個默認樣式的日期選擇對話框。其中,年、月、日通過上下滑動選擇。

圖5-1 日期選擇對話框
下面是使用日期對話框的代碼:
public class DatePickerActivity extends AppCompatActivity implements OnClickListener, OnDateSetListener { private TextView tv_date; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_date_picker); tv_date = (TextView) findViewById(R.id.tv_date); findViewById(R.id.btn_date).setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_date) { Calendar calendar = Calendar.getInstance(); DatePickerDialog dialog = new DatePickerDialog(this, this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); dialog.show(); } } @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { String desc = String.format("您選擇的日期是%d年%d月%d日", year, monthOfYear+1, dayOfMonth); tv_date.setText(desc); } }
5.1.2 時間選擇器TimePicker
有了日期選擇器,肯定有對應的時間選擇器。同樣,實際開發中也不直接用TimePicker,而是用封裝好的時間選擇對話框TimePickerDialog。該對話框的用法類似DatePickerDialog,不同之處主要有兩個:
(1)構造函數傳的是當前的小時與分鐘,最后一個參數表示是否采用二十四小時制,一般傳true,表示小時的數值范圍為0~23。
(2)時間選擇監聽器是OnTimeSetListener,對應需要實現的方法是onTimeSet,在該方法中可獲得用戶選好的小時和分鐘。
圖5-2所示為一個默認樣式的時間選擇對話框。其中,小時與分鐘可通過上下滑動選擇。

圖5-2 時間選擇對話框
下面是使用時間對話框的代碼:
public class TimePickerActivity extends AppCompatActivity implements OnClickListener, OnTimeSetListener { private TextView tv_time; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_time_picker); tv_time = (TextView) findViewById(R.id.tv_time); findViewById(R.id.btn_time).setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_time) { Calendar calendar = Calendar.getInstance(); TimePickerDialog dialog = new TimePickerDialog(this, this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); dialog.show(); } } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String desc = String.format("您選擇的時間是%d時%d分", hourOfDay, minute); tv_time.setText(desc); } }
- Vue.js 3.x快速入門
- 深入淺出Electron:原理、工程與實踐
- Manga Studio Ex 5 Cookbook
- 數據結構(Python語言描述)(第2版)
- PHP 編程從入門到實踐
- JavaScript從入門到精通(第3版)
- Visual C#通用范例開發金典
- ANSYS Fluent 二次開發指南
- Java EE 8 Application Development
- C和C++游戲趣味編程
- Learning R for Geospatial Analysis
- Learning PHP 7
- 編寫高質量代碼:改善Objective-C程序的61個建議
- Python機器學習之金融風險管理
- Lift Application Development Cookbook