Android--UI之DatePicker、TimePicker...
前言
這一篇博客分別講解Android平臺(tái)下,關(guān)于日期和時(shí)間的幾個(gè)相關(guān)控件。包括DatePicker(日期選擇控件)、TimePicker(時(shí)間選擇控件)、DatePickerDialog(日期選擇對(duì)話框)、TimePickerDialog(時(shí)間選擇對(duì)話框)、AnalogClock(模擬時(shí)鐘控件)、DigitalClock(數(shù)字時(shí)鐘控件)。對(duì)于時(shí)間控件,無非就是一個(gè)展示、修改、獲取等操作,下面一一講解。
?
DatePicker、TimePicker
DatePicker、TimePicker都繼承自android.widget.FrameLayout,并且默認(rèn)展示風(fēng)格、與操作風(fēng)格也類似。DatePicker用于展示一個(gè)日期選擇控件,TimePicker用于展示一個(gè)時(shí)間選擇控件。
作為一個(gè)日期選擇控件,DatePicker可以通過設(shè)置屬性來確定日期選擇范圍,也可以通過定義好的方法獲取到當(dāng)前選中的時(shí)間,并且在修改日期的時(shí)候,有響應(yīng)的事件對(duì)其進(jìn)行響應(yīng)。
DatePicker常用相關(guān)屬性:
- android:calendarViewShown:是否顯示日歷。
- android:startYear:設(shè)置可選開始年份。
- android:endYear:設(shè)置可選結(jié)束年份。
- android:maxDate:設(shè)置可選最大日期,以mm/dd/yyyy格式設(shè)置。
- android:minDate:設(shè)置可選最小日期,以mm/dd/yyyy格式設(shè)置。
DatePicker的方法而言,除了常用獲取屬性的setter、getter方法之外,還需要特別注意一個(gè)初始化的方法init()方法,用于做DatePicker控件的初始化,并且設(shè)置日期被修改后,回調(diào)的響應(yīng)事件。此方法的簽名如下:
init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)
從上面的init()方法可以看到,DatePicker被修改時(shí)響應(yīng)的事件是DatePicker.OnDateChangedListener事件,如果要響應(yīng)此事件,需要實(shí)現(xiàn)其中的onDateChanged()方法,其中參數(shù)從簽名即可了解意思,這里不再累述。
onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
?
作為一個(gè)時(shí)間選擇控件來說,TimePicker需要與時(shí)間相關(guān)的getter、setter方法之外,還需要有時(shí)間被修改夠,回調(diào)的響應(yīng)事件。
TimePicker常用方法有如下幾個(gè):
- is24HourView():判斷是否為24小時(shí)制。
- setIs24HourView():設(shè)置是否為24小時(shí)制顯示。
- getCurrentXxx():獲取當(dāng)前時(shí)間。
- setCurrentXxx():設(shè)置當(dāng)前時(shí)間。
- setOnTimeChangedListener():設(shè)置時(shí)間被修改的回調(diào)方法。
TimePicker控件被修改的回調(diào)方法,通過setOnTimeChangedListener()方法設(shè)置,其傳遞一個(gè)TimePicker.OnTimeChangedListener接口,需要實(shí)現(xiàn)其中的onTimeChanged()方法。
? 下面通過一個(gè)示例來講解這兩個(gè)控件的使用,在示例中分別展示了這兩個(gè)控件,并在其修改之后,把修改值通過Toast的方式展示到屏幕上。
布局代碼:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <DatePicker 8 android:id="@+id/dpPicker" 9 android:calendarViewShown="false" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" /> 12 13 <TimePicker 14 android:id="@+id/tpPicker" 15 android:layout_width="match_parent" 16 android:layout_height="wrap_content" /> 17 18 19 </LinearLayout>實(shí)現(xiàn)代碼:?
1 package com.bgxt.datatimepickerdemo; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.widget.DatePicker; 9 import android.widget.DatePicker.OnDateChangedListener; 10 import android.widget.TextView; 11 import android.widget.TimePicker; 12 import android.widget.Toast; 13 14 public class DataTimePicker extends Activity { 15 private DatePicker datePicker; 16 private TimePicker timePicker; 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_datatimepicker); 22 23 datePicker = (DatePicker) findViewById(R.id.dpPicker); 24 timePicker = (TimePicker) findViewById(R.id.tpPicker); 25 26 datePicker.init(2013, 8, 20, new OnDateChangedListener() { 27 28 @Override 29 public void onDateChanged(DatePicker view, int year, 30 int monthOfYear, int dayOfMonth) { 31 // 獲取一個(gè)日歷對(duì)象,并初始化為當(dāng)前選中的時(shí)間 32 Calendar calendar = Calendar.getInstance(); 33 calendar.set(year, monthOfYear, dayOfMonth); 34 SimpleDateFormat format = new SimpleDateFormat( 35 "yyyy年MM月dd日 HH:mm"); 36 Toast.makeText(DataTimePicker.this, 37 format.format(calendar.getTime()), Toast.LENGTH_SHORT) 38 .show(); 39 } 40 }); 41 42 timePicker.setIs24HourView(true); 43 timePicker 44 .setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { 45 @Override 46 public void onTimeChanged(TimePicker view, int hourOfDay, 47 int minute) { 48 Toast.makeText(DataTimePicker.this, 49 hourOfDay + "小時(shí)" + minute + "分鐘", 50 Toast.LENGTH_SHORT).show(); 51 } 52 }); 53 54 } 55 }效果展示:
?
DatePickerDialog、TimePickerDialog
DatePickerDialog、TimePickerDialog是兩個(gè)對(duì)話框控件,一個(gè)彈出對(duì)話框用于選擇日期,一個(gè)彈出對(duì)話框用于選擇時(shí)間,都繼承自android.app.AlertDialog。
這兩個(gè)控件的開發(fā)過程,其主要就是開發(fā)其選擇后日期或時(shí)間后,相應(yīng)的事件。
對(duì)于DatePickeDialog而言,通過構(gòu)造函數(shù)可以設(shè)置彈出的日期控件的初始值,并且可以指定選中日期后,回調(diào)事件的實(shí)現(xiàn),構(gòu)造函數(shù)的簽名如下:
DatePickerDialog(Context context, DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)
其中DatePickerDialog.OnDateSetListener為日期選中的響應(yīng)事件,其他為日期彈出窗口初始化的日期,對(duì)于一個(gè)OnDateSetListener接口而言,需要實(shí)現(xiàn)其中的onDateSet()方法,在這個(gè)方法內(nèi),可以得到用戶選中的日期。
對(duì)于TimePickerDialog而言,同樣可以通過構(gòu)造函數(shù)設(shè)置初始值,并且設(shè)定選中日期后,回調(diào)事件的實(shí)現(xiàn),構(gòu)造函數(shù)的簽名如下:
TimePickerDialog(Context context, TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)
其中TimePickerDialog.OnTimeSetListener為時(shí)間選中的響應(yīng)事件,其他為時(shí)間彈出窗口初始化的時(shí)間,對(duì)于一個(gè)OnTimeSetListener接口而言,需要實(shí)現(xiàn)其中的onTimeSet()方法,在這個(gè)方法內(nèi),可以得到用戶選中的時(shí)間。
?
AnalogClock、DigitalClock
? AnalogClock、DigitalClock為兩個(gè)時(shí)間展示控件,切只是展示的風(fēng)格不同而已,沒有什么太大的區(qū)別。有一點(diǎn)值得注意的就是,這兩個(gè)控件展示的時(shí)間是無法修改的,僅為系統(tǒng)當(dāng)前時(shí)間。看示例就能明白,沒什么好詳細(xì)說的。
下面通過一個(gè)例子說明一下DatePickerDialog、TimePickerDialog、AnalogClock、DigitalClock四個(gè)控件的使用。
布局代碼:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="指針時(shí)鐘:" /> 11 12 <AnalogClock 13 android:layout_width="fill_parent" 14 android:layout_height="wrap_content" /> 15 16 <TextView 17 android:layout_width="fill_parent" 18 android:layout_height="wrap_content" 19 android:text="數(shù)字時(shí)鐘:" /> 20 21 <DigitalClock 22 android:layout_width="fill_parent" 23 android:layout_height="wrap_content" 24 android:textSize="20dp" /> 25 <Button 26 android:id="@+id/btnTimePickerDialog" 27 android:layout_width="fill_parent" 28 android:layout_height="wrap_content" 29 android:text="Show TimePickerDialog" 30 /> 31 <Button 32 android:id="@+id/btnDatePickerDialog" 33 android:layout_width="fill_parent" 34 android:layout_height="wrap_content" 35 android:text="Show DatePickerDialog" 36 /> 37 </LinearLayout>
實(shí)現(xiàn)代碼:
1 package com.bgxt.datatimepickerdemo; 2 3 import android.app.Activity; 4 import android.app.DatePickerDialog; 5 import android.app.DatePickerDialog.OnDateSetListener; 6 import android.app.TimePickerDialog; 7 import android.app.TimePickerDialog.OnTimeSetListener; 8 import android.os.Bundle; 9 import android.view.View; 10 import android.view.View.OnClickListener; 11 import android.widget.Button; 12 import android.widget.DatePicker; 13 import android.widget.TimePicker; 14 import android.widget.Toast; 15 16 public class AnalogDigitalClock extends Activity implements OnClickListener { 17 private Button btnDate, btnTime; 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_anologdigital); 23 btnDate = (Button) findViewById(R.id.btnDatePickerDialog); 24 btnTime = (Button) findViewById(R.id.btnTimePickerDialog); 25 btnDate.setOnClickListener(this); 26 btnTime.setOnClickListener(this); 27 } 28 29 @Override 30 public void onClick(View v) { 31 switch (v.getId()) { 32 case R.id.btnDatePickerDialog: 33 DatePickerDialog datePicker=new DatePickerDialog(AnalogDigitalClock.this, new OnDateSetListener() { 34 35 @Override 36 public void onDateSet(DatePicker view, int year, int monthOfYear, 37 int dayOfMonth) { 38 // TODO Auto-generated method stub 39 Toast.makeText(AnalogDigitalClock.this, year+"year "+(monthOfYear+1)+"month "+dayOfMonth+"day", Toast.LENGTH_SHORT).show(); 40 } 41 }, 2013, 7, 20); 42 datePicker.show(); 43 break; 44 45 case R.id.btnTimePickerDialog: 46 TimePickerDialog time=new TimePickerDialog(AnalogDigitalClock.this, new OnTimeSetListener() { 47 48 @Override 49 public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 50 // TODO Auto-generated method stub 51 Toast.makeText(AnalogDigitalClock.this, hourOfDay+"hour "+minute+"minute", Toast.LENGTH_SHORT).show(); 52 } 53 }, 18, 25, true); 54 time.show(); 55 break; 56 } 57 58 } 59 }效果展示:
源碼下載
總結(jié)
? 以上就講解了在Android平臺(tái)下,幾個(gè)與時(shí)間相關(guān)的控件,沒有什么特別的,注意設(shè)置與響應(yīng)事件即可。
請(qǐng)支持原創(chuàng),尊重原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。謝謝。
?
總結(jié)
以上是生活随笔為你收集整理的Android--UI之DatePicker、TimePicker...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大样本OLS模型假设及R实现
- 下一篇: PSFTP工具传输文件的命令使用方法