亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

DateTimePickDialog日期選擇控件

2019-11-06 09:43:27
字體:
來源:轉載
供稿:網友

關于日期選擇控件,之前項目中用到了好多次,不同的項目需求是不一樣的,比如說UI啊,時間選擇限制等等。這次寫的demo就從幾個方面來解決項目中可能出現的需求情況。 首先看效果: 只顯示年月日 顯示年月日和時間

1.首先關于dialog的xml布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#FFFFFFFF" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp"> <TextView android:id="@+id/date_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="" android:textColor="#49ADE9" android:textSize="17dp"/> <ImageView android:id="@+id/date_cancle" android:layout_width="20dp" android:layout_height="20dp" android:background="@mrsshown="true" android:theme="@style/Theme.AppCompat.Light"></DatePicker> <TimePicker android:id="@+id/timepicker" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/Theme.AppCompat.Light" android:timePickerMode="spinner" android:visibility="gone"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#f4f4f4"/> <TextView android:id="@+id/date_submit" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingBottom="16dp" android:paddingTop="16dp" android:text="完成" android:textSize="17dp"/></LinearLayout> 注:1>.在DatePicker中有個屬性datePickerMode,這個是為了選擇顯示模式,比如:日歷模式,滾動模式。 2>.同樣在TimePicker中也有個屬性timePickerMode,是否是顯示日歷模式還是滾動模式

2.Activity布局顯示:

<?xml version="1.0" encoding="utf-8"?><LinearLayout android:id="@+id/activity_main" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.li.datepickertimerdialog.MainActivity"> <Button android:id="@+id/btn_time" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="選擇時間" android:textSize="14dp" android:textColor="#000000"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ff0000" android:text="時間顯示:"/> <TextView android:id="@+id/show_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ff0000"/> </LinearLayout></LinearLayout>

3.點擊彈出時間選擇控件

Button btnTime = (Button) findViewById(R.id.btn_time); final TextView showTime = (TextView)findViewById(R.id.show_time); btnTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(MainActivity.this, null); dateTimePicKDialog.dateTimePicKDialog(showTime, 0, false); } }); 這里關于dateTimePicKDialog中幾個參數的介紹: ①.showTime是要顯示最終選擇的時間 ②.0表示大于當前時間0天,如果不需要限制時間選擇的話,我這里是傳了-9999,這塊代碼有些問題,沒來得及修改,但是不影響操作,望見諒 ③.boolean值表示是否要展示TimePicker,false表示不展示

4.DateTimePickDialogUtil代碼 初始化:

public void init(DatePicker datePicker) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); if (day > 0) { calendar.setTime(new Date(System.currentTimeMillis() + (day * 60 * 60 * 1000 * 24))); dateTime = sdf.format(calendar.getTime()); } else { dateTime = sdf.format(calendar.getTime()); } if (!(null == initDateTime || "".equals(initDateTime))) { calendar = this.getCalendarByInintData(initDateTime); } else { initDateTime = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + calendar.get(Calendar.DAY_OF_MONTH) + "- "; } datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); if (day > 0) { Calendar mCalendar = Calendar.getInstance(); mCalendar.setTime(new Date(System.currentTimeMillis() + (day * 60 * 60 * 1000 * 24))); // 獲得日歷實例 Calendar calendar = Calendar.getInstance(); calendar.set(view.getYear(), view.getMonth(), view.getDayOfMonth()); if (System.currentTimeMillis() + (day * 60 * 60 * 1000 * 24) > calendar.getTimeInMillis()) { view.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this); dateTime = sdf.format(mCalendar.getTime()); dateTitle.setText(dateTime + getWeek(dateTime)); } else { // 獲得日歷實例 dateTime = sdf.format(calendar.getTime()); dateTitle.setText(dateTime + getWeek(dateTime)); } } else if (day == -9999) { // 獲得日歷實例 Calendar calendar = Calendar.getInstance(); calendar.set(view.getYear(), view.getMonth(), view.getDayOfMonth()); dateTime = sdf.format(calendar.getTime()); dateTitle.setText(dateTime + getWeek(dateTime)); } else { if (isDateAfter(view)) { Calendar mCalendar = Calendar.getInstance(); view.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this); dateTime = sdf.format(mCalendar.getTime()); dateTitle.setText(dateTime + getWeek(dateTime)); } else { // 獲得日歷實例 Calendar calendar = Calendar.getInstance(); calendar.set(view.getYear(), view.getMonth(), view.getDayOfMonth()); dateTime = sdf.format(calendar.getTime()); dateTitle.setText(dateTime + getWeek(dateTime)); } } } PRivate boolean isDateAfter(DatePicker tempView) { Calendar mCalendar = Calendar.getInstance(); Calendar tempCalendar = Calendar.getInstance(); tempCalendar.set(tempView.getYear(), tempView.getMonth(), tempView.getDayOfMonth(), 0, 0, 0); if (tempCalendar.after(mCalendar)) return false; else return true; } }); }

彈出dialog:

/** * 彈出日期時間選擇框方法 * 當前時間的下一天 * * @param inputDate :為需要設置的日期時間文本編輯框 * @return */ public Dialog dateTimePicKDialog(final TextView inputDate, int day, final boolean isShowTime) { this.day = day; LinearLayout dateTimeLayout = (LinearLayout) activity .getLayoutInflater().inflate(R.layout.common_datetime, null); final Dialog dialog = new android.app.AlertDialog.Builder(activity).create(); dialog.setCanceledOnTouchOutside(false); dialog.setOnKeyListener(keylistener); dialog.setCancelable(false); dialog.show(); dialog.setContentView(dateTimeLayout); dateTitle = (TextView) dateTimeLayout.findViewById(R.id.date_title); TimePicker timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker); if (isShowTime) { timePicker.setVisibility(View.VISIBLE); timePicker.setIs24HourView(true); } hours = timePicker.getCurrentHour(); minutes = timePicker.getCurrentMinute(); timePicker.setOnTimeChangedListener(new OnTimeChangedListener() { @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { hours = hourOfDay; minutes = minute; } }); dateTitle.setText(initDateTime); ImageView dateCancle = (ImageView) dateTimeLayout.findViewById(R.id.date_cancle); TextView dateSubmit = (TextView) dateTimeLayout.findViewById(R.id.date_submit); datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker); dateSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Long diff = null; try { Date d1 = df.parse(initDateTime); Date d2 = df.parse(dateTime); //前的時間 diff = d1.getTime() - d2.getTime(); //兩時間差 d = d1.getTime(); } catch (ParseException e) { e.printStackTrace(); } if (diff >= 0) { Toast.makeText(activity.getapplicationContext(), "請選擇大于現在的日期", Toast.LENGTH_SHORT).show(); } else { if (isShowTime) { if (minutes < 10) { inputDate.setText(dateTime + " " + hours + ":0" + minutes); } else { inputDate.setText(dateTime + " " + hours + ":" + minutes); } } else { inputDate.setText(dateTime); } if (cd != null) { cd.toShow(d); } } dialog.dismiss(); } }); dateCancle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); init(datePicker); dateTitle.setText(dateTime + getWeek(dateTime)); return dialog; }

關于選擇周幾:

private String getWeek(String time) { String Week = " 周"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//也可將此值當參數傳進來 Calendar c = Calendar.getInstance(); try { c.setTime(format.parse(time)); } catch (ParseException e) { e.printStackTrace(); } switch (c.get(Calendar.DAY_OF_WEEK)) { case 1: Week += "日"; break; case 2: Week += "一"; break; case 3: Week += "二"; break; case 4: Week += "三"; break; case 5: Week += "四"; break; case 6: Week += "五"; break; case 7: Week += "六"; break; default: break; } return Week; }

由于有的項目中需要在年月日中的顯示中添加“日”,這個一直沒找到好的方法,以及對時間的顯示只顯示時,去掉分,這個也一直沒想到好的做法(除了自定義,有水平有限)。希望有大神了可以再此基礎上修改,可以發到我郵箱(1346765933@QQ.com)。 最后如果有寫的不好的請提出您寶貴的意見,謝謝! demo在github的地址:https://github.com/CristianoLi/DatePickerTimerDialog


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久一区二区| 久久躁狠狠躁夜夜爽| 午夜精品久久久久久久99热| 国产精品久久久久久av下载红粉| 欧美激情一区二区三区高清视频| 亚洲日本欧美中文幕| 国产精品自拍视频| 久久久久久久一| 国产乱人伦真实精品视频| 欧美www视频在线观看| 中日韩美女免费视频网址在线观看| 久久久国产一区二区三区| 欧美黑人性生活视频| 国产精品影片在线观看| 欧美疯狂性受xxxxx另类| 国产91ⅴ在线精品免费观看| 精品国产拍在线观看| 亚洲午夜激情免费视频| 国产精品日韩电影| 欧美日韩在线视频一区| 好吊成人免视频| 热99精品里视频精品| 欧洲成人免费视频| 2018中文字幕一区二区三区| 国产精品亚洲自拍| 欧美风情在线观看| 成人国产精品一区二区| 98精品在线视频| 国产z一区二区三区| 欧美一区二区三区精品电影| 亚洲精品成人久久| 亚洲成人在线网| 亚洲a中文字幕| 久久精品小视频| 欧美成人精品一区二区三区| 国内偷自视频区视频综合| 国产精品永久免费在线| 懂色av影视一区二区三区| 亚洲91精品在线| 欧美黑人一级爽快片淫片高清| 国产精品91在线| 一区二区av在线| 国产日本欧美视频| 亚洲美女www午夜| 欧美在线国产精品| 亚洲的天堂在线中文字幕| 欧美一级黑人aaaaaaa做受| 国产成人精品av在线| 成人欧美一区二区三区在线| 狠狠躁夜夜躁人人爽超碰91| 国产精品久久久久久久久久新婚| 欧美丰满老妇厨房牲生活| 理论片在线不卡免费观看| 色先锋资源久久综合5566| 97碰碰碰免费色视频| 国产精品偷伦一区二区| 欧美日韩国产999| 亚洲男女自偷自拍图片另类| 色无极亚洲影院| 欧美国产亚洲视频| 国产精品免费一区二区三区都可以| 在线观看亚洲区| 国产精品久久久久不卡| 91在线国产电影| 精品久久久久久中文字幕大豆网| 91牛牛免费视频| 91地址最新发布| 在线播放国产一区中文字幕剧情欧美| 亚洲精选在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 91在线观看欧美日韩| 欧美大片欧美激情性色a∨久久| 91中文精品字幕在线视频| 国产精品三级在线| 欧美日韩人人澡狠狠躁视频| 国产一区二区欧美日韩| 黑人巨大精品欧美一区二区一视频| 国产精品入口福利| 日韩欧美在线网址| 国产美女直播视频一区| 日韩女优人人人人射在线视频| 77777少妇光屁股久久一区| 4p变态网欧美系列| 欧美孕妇毛茸茸xxxx| 91黑丝高跟在线| 欧美视频裸体精品| 日韩欧美一区视频| 色噜噜久久综合伊人一本| 欧美中文字幕视频在线观看| 97国产suv精品一区二区62| 国模精品视频一区二区| 亚洲精品一区av在线播放| 欧美成人一二三| 亚洲国产天堂网精品网站| 69av视频在线播放| 亚洲va欧美va国产综合久久| 久久精品视频在线观看| 欧美成人免费观看| 疯狂欧美牲乱大交777| 最近2019年日本中文免费字幕| 欧美电影第一页| 亚洲最大激情中文字幕| 成人av在线亚洲| 91在线视频成人| 精品久久久视频| 欧美性生交xxxxx久久久| 久久久999国产| 精品久久久久久| 国产美女搞久久| 国产91色在线|免| 亚洲视频在线视频| 欧美日韩国产专区| 午夜精品国产精品大乳美女| 欧美自拍视频在线| 992tv成人免费影院| 91久久精品美女| 97在线看免费观看视频在线观看| 久久99国产综合精品女同| 日本中文字幕不卡免费| 日韩三级成人av网| 97人人模人人爽人人喊中文字| 欧美午夜宅男影院在线观看| 欧美主播福利视频| 日韩不卡在线观看| 日日狠狠久久偷偷四色综合免费| 欧美三级欧美成人高清www| 亚洲视频精品在线| 日韩电影在线观看中文字幕| 亚洲国产欧美一区二区三区同亚洲| 成人www视频在线观看| 91po在线观看91精品国产性色| 亚洲精品美女在线观看播放| 亚洲一二在线观看| 亚洲欧美日韩第一区| 97国产精品久久| 亚洲三级av在线| 国产精品久久久久久久久久久久久久| 亚洲福利视频网站| 亚洲精品福利在线| 国产欧亚日韩视频| 亚洲免费人成在线视频观看| 九色91av视频| 亚洲精品国产精品乱码不99按摩| 国产成人免费av电影| 欧美精品福利视频| 欧美另类老肥妇| 日韩国产欧美精品在线| 亚洲电影免费观看高清完整版在线观看| 久久久久久成人精品| 黑人欧美xxxx| 精品亚洲va在线va天堂资源站| 国产一区二区三区久久精品| 欧美极品少妇与黑人| 亚洲伊人成综合成人网| 91色视频在线导航| 日韩国产欧美精品一区二区三区| 大量国产精品视频| 欧美黄色片在线观看| 欧美疯狂做受xxxx高潮| 亚洲免费人成在线视频观看| 亚洲美女av在线播放| 久久精品久久久久久国产 免费| 欧美一级视频免费在线观看| 国产一区二区三区毛片|