最近接觸了日期選擇的功能,那么肯定得需要一個日期選擇控件,Android 系統有自帶的 DatePicker 控件,但是不說這個控件有多
難看吧,現在 Android 手機版本那么多,用戶彈出來的控件五花八門的也不太好,所以只好走自定義的道路了。先是在網上找了一
些demo看了看,發現不是很滿足自己的需求,但是又懶得自己從頭寫,就找了一個還不錯的demo,對代碼進行了一些簡化,並添
加了一些方法來滿足個人需求。
首先看看效果圖:
代碼比較多就不全部貼上來了,需要的朋友可以自行下載完整源碼查看。
這里就大概講一下幾種調用方法:
- private void initDatePicker() {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA);
- String now = sdf.format(new Date());
- currentDate.setText(now.split(" ")[0]);
- currentTime.setText(now);
- customDatePicker1 = new CustomDatePicker(this, new CustomDatePicker.ResultHandler() {
- @Override
- public void handle(String time) { // 回調接口,獲得選中的時間
- currentDate.setText(time.split(" ")[0]);
- }
- }, "2010-01-01 00:00", now); // 初始化日期格式請用:yyyy-MM-dd HH:mm,否則不能正常運行
- customDatePicker1.showSpecificTime(false); // 不顯示時和分
- customDatePicker1.setIsLoop(false); // 不允許循環滾動
- customDatePicker2 = new CustomDatePicker(this, new CustomDatePicker.ResultHandler() {
- @Override
- public void handle(String time) { // 回調接口,獲得選中的時間
- currentTime.setText(time);
- }
- }, "2010-01-01 00:00", now); // 初始化日期格式請用:yyyy-MM-dd HH:mm,否則不能正常運行
- customDatePicker2.showSpecificTime(true); // 顯示時和分
- customDatePicker2.setIsLoop(true); // 允許循環滾動
- }
這里是對自定義控件的初始化以及一些參數的設置,其中關鍵的是一個構造方法和兩個設置顯示效果的方法。
- public CustomDatePicker(Context context, ResultHandler resultHandler, String startDate, String endDate)
其中,第一個參數是 Activity 的Context,第二個參數是一個回調結果的接口,通過該接口可以把選中的時間發送給當前 Activity ,
第三個和第四個參數分別為該日期控件允許選擇的范圍的起始時間和結束時間。這里需要說明一下的是起始時間和結束時間的格式
必須為“yyyy-MM-dd HH:mm”,否則該控件不會被初始化。
- void showSpecificTime(boolean show)
- void setIsLoop(boolean isLoop)
第一個方法用於設置該日期選擇控件是否顯示時和分,如上兩張圖所示,一個只能選擇到天,另一個可以選擇到分。
第二個方法用於設置該日期選擇控件中的滾軸是否可以循環滾動,如上兩張圖所示,一個滾動到底就不能繼續了,另一個可以循環
滾動。
初始化成功后,可以通過以下方式調用:
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.selectDate:
- // 日期格式為yyyy-MM-dd
- customDatePicker1.show(currentDate.getText().toString());
- break;
- case R.id.selectTime:
- // 日期格式為yyyy-MM-dd HH:mm
- customDatePicker2.show(currentTime.getText().toString());
- break;
- }
- }
這里傳入的時間字符串參數的格式必須是正確的日期格式,否則不會顯示控件。
到這一步就可以顯示日期選擇控件並獲取選中時間了。
接下來說一下該控件用到的一些資源文件,可以通過修改這些資源文件對控件進行一些簡單的修改。
首先是 res\values\colors.xml 文件,這里面定義了一些該控件用到的顏色:
- <resources>
- <color name="background">#FFFFFF</color>
- <color name="split_line">#11112233</color>
- <color name="text1">#59B29C</color>
- <color name="text2">#333333</color>
- </resources>
從上到下一次是背景顏色,分隔線顏色,標題、按鈕和選中時間的字體顏色,其余字體顏色。
接下來是 res\values\strings.xml 文件,這里定義了顯示的文字:
- <resources>
- <string name="cancle">取消</string>
- <string name="title">請選擇時間</string>
- <string name="commit">確定</string>
- <string name="year">年</string>
- <string name="month">月</string>
- <string name="day">日</string>
- <string name="hour">時</string>
- <string name="minute">分</string>
- </resources>
具體的顯示位置可自行參照圖片判斷。
最后是 res\values\styles.xml 文件,這里定義了該控件彈出的效果,一般可不用修改:
- <resources>
- <style name="time_dialog" parent="android:style/Theme.Dialog">
- <item name="android:windowFrame">@null</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowIsFloating">true</item>
- <item name="android:windowContentOverlay">@null</item>
- <item name="android:windowBackground">@color/background</item>
- </style>
- </resources>