網(wǎng)站首頁 編程語言 正文
Android開發(fā)之自定義DataTimePicker(日期時(shí)間選擇器),供大家參考,具體內(nèi)容如下
最近項(xiàng)目中,要求日期和時(shí)間在同一個(gè)頁面同時(shí)選擇,這個(gè)就需要自定義了,其實(shí)所謂的自定義只不過是把時(shí)間和日期對(duì)話框組合在一起而已。
一、基本知識(shí)
1、關(guān)于日期的幾個(gè)控件:
DatePicker(日期選擇控件)
TimePicker(時(shí)間選擇控件)
DatePickerDialog(日期選擇對(duì)話框)
TimePickerDialog(時(shí)間選擇對(duì)話框)
AnalogClock(模擬時(shí)鐘控件)
DigitalClock(數(shù)字時(shí)鐘控件)
2、相關(guān)控件介紹
DatePicker 、 TimePicker 都繼承自Android.widget.FrameLayout,并且默認(rèn)展示風(fēng)格、與操作風(fēng)格也類似。DatePicker用于展示一個(gè)日期選擇控件,TimePicker用于展示一個(gè)時(shí)間選擇控件。
DatePicker常用相關(guān)屬性:
android:calendarViewShown:是否顯示日歷
android:spinnersShown:是否顯示為滾動(dòng)條樣式(會(huì)同時(shí)顯示日歷和滾動(dòng)條樣式上邊兩個(gè)都不設(shè)置)
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()方法。
二、實(shí)現(xiàn)步驟
首先,對(duì)話框的布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ? android:layout_width="wrap_content" ? ? android:layout_height="wrap_content" ? ? android:gravity="center" ? ? android:orientation="vertical"> ? ? <DatePicker ? ? ? ? android:id="@+id/data_picker" ? ? ? ? android:layout_width="wrap_content" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:calendarViewShown="false" /> ? ? <TimePicker ? ? ? ? android:id="@+id/timer_picker" ? ? ? ? android:layout_width="wrap_content" ? ? ? ? android:layout_height="wrap_content" /> </LinearLayout>
然后,我封裝了一個(gè)工具類:
public static void getDateTime(Context mContext, final TextView textView) {
? ? ? ? View date_time_picker = View.inflate(mContext, R.layout.date_time_picker, null);
? ? ? ? final DatePicker datePicker = (DatePicker) date_time_picker.findViewById(R.id.data_picker);
? ? ? ? final TimePicker timePicker = (TimePicker) date_time_picker.findViewById(R.id.timer_picker);
? ? ? ? timePicker.setIs24HourView(true);
? ? ? ? // ? Build ? DateTimeDialog
? ? ? ? AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
? ? ? ? builder.setView(date_time_picker);
? ? ? ? builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onClick(DialogInterface dialog, int which) {
? ? ? ? ? ? ? ? String dateStr = datePicker.getYear() + "-" + datePicker.getMonth() + "-" + datePicker.getDayOfMonth();
? ? ? ? ? ? ? ? int currentMinute = timePicker.getCurrentMinute();
? ? ? ? ? ? ? ? String curMinute = "";
? ? ? ? ? ? ? ? if (currentMinute < 10) {
? ? ? ? ? ? ? ? ? ? curMinute = "0" + currentMinute;
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? curMinute = String.valueOf(currentMinute);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? String timeStr = timePicker.getCurrentHour() + ":" + curMinute;
? ? ? ? ? ? ? ? textView.setText(dateStr + " ?" + timeStr);
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? builder.show();
? ? }
最后,直接調(diào)用就好了
DateUtil.getDateTime(this, tv);
原文鏈接:https://blog.csdn.net/anwanfei/article/details/78071729
相關(guān)推薦
- 2024-01-15 idea 折疊代碼塊技巧 關(guān)于<editor-fold>
- 2022-05-05 Python學(xué)習(xí)之字符串常用方法總結(jié)_python
- 2023-03-13 Android布局中margin與padding的區(qū)別及說明_Android
- 2022-05-21 通過StatefulSet部署有狀態(tài)服務(wù)應(yīng)用實(shí)現(xiàn)方式_服務(wù)器其它
- 2022-11-12 基于Python制作一個(gè)匯率換算程序_python
- 2023-10-09 Cookie和localStorage存儲(chǔ)的區(qū)別
- 2022-06-01 Apache?Tomcat如何高并發(fā)處理請(qǐng)求_Tomcat
- 2023-07-29 使用 XMLHttpRequest 實(shí)現(xiàn) ajax
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支