listHour = new ArrayList<>();

private ListlistMinute = new ArrayList<>();

private Context mContext;

private int currentYear; //系统当前时间

private int currentMonth;

private int currentDay;

private int currentHour;

private int currentMinute;

private int selectYear = 0;

private int selectMonth = 0;

public DateDialog(@NonNull Context context) {

super(context, R.style.DocOptionDialogStyle);

this.mContext = context;

View view = LayoutInflater.from(context).inflate(R.layout.dialog_date_layout, null);

setContentView(view);

initData();

initView(view);

}

private void initData() {

initCurrentDate();

initYear();

initMonth();

initDay();

initHour();

initMinute();

}

/**

* 初始化系统当前时间

*/

private void initCurrentDate() {

Calendar calendar = Calendar.getInstance();

calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));

currentYear = calendar.get(Calendar.YEAR);

currentMonth = calendar.get(Calendar.MONTH);

currentDay = calendar.get(Calendar.DAY_OF_MONTH);

currentHour = calendar.get(Calendar.HOUR_OF_DAY);

currentMinute = calendar.get(Calendar.MINUTE);

}

/**

* 集合添加年

*/

private void initYear() {

for (int i = currentYear; i <= currentYear + 1; i++) {

listYear.add(i + "年");

}

}

/**

* 集合添加月

*/

private void initMonth() {

for (int i = 1; i <= 12; i++) {

listMonth.add(String.format("%02d", i) + "月");

}

}

/**

* 集合添加天数

*/

private void initDay() {

//判断一个月有多少天

int hasDay = getDay(currentYear, (currentMonth+1));

for (int i = 1; i <= hasDay; i++) {

listDay.add(String.format("%02d", i) + "日");

}

}

/**

* 集合添加小时

*/

private void initHour() {

for (int i = 0; i <= 24; i++) {

listHour.add(String.format("%02d", i) + "点");

}

}

/**

* 集合添加分钟

*/

private void initMinute() {

for (int i = 0; i <= 60; i++) {

listMinute.add(String.format("%02d", i) + "分");

}

}

private void initView(View view) {

tv_dialog_cancel = view.findViewById(R.id.tv_dialog_cancel);

tv_dialog_ok = view.findViewById(R.id.tv_dialog_ok);

wv_year = view.findViewById(R.id.wv_year);

wv_month = view.findViewById(R.id.wv_month);

wv_day = view.findViewById(R.id.wv_day);

wv_hour = view.findViewById(R.id.wv_hour);

wv_minute = view.findViewById(R.id.wv_minute);

//取消弹窗

tv_dialog_cancel.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

dismiss();

}

});

//设置在屏幕中的位置

Window window = getWindow();

window.setGravity(Gravity.CENTER); //居中

DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();

window.setLayout((int) (displayMetrics.widthPixels * 0.9), WindowManager.LayoutParams.WRAP_CONTENT);

//设置年数据

wv_year.setWheelAdapter(new ArrayWheelAdapter(mContext)); // 文本数据源

wv_year.setSkin(WheelView.Skin.Holo); // common皮肤

wv_year.setWheelData(listYear);

wv_year.setSelection(0);

wv_year.setVisibility(View.VISIBLE); //解决数据加载延迟

wv_year.setOnWheelItemSelectedListener(new WheelView.OnWheelItemSelectedListener() {

@Override

public void onItemSelected(int position, Object o) {

updateDay();

}

});

//月

wv_month.setWheelAdapter(new ArrayWheelAdapter(mContext)); // 文本数据源

wv_month.setSkin(WheelView.Skin.Holo); // common皮肤

wv_month.setWheelData(listMonth);

wv_month.setSelection(currentMonth);

wv_month.setVisibility(View.VISIBLE);

wv_month.setOnWheelItemSelectedListener(new WheelView.OnWheelItemSelectedListener() {

@Override

public void onItemSelected(int position, Object o) {

updateDay();

}

});

//日

wv_day.setWheelAdapter(new ArrayWheelAdapter(mContext)); // 文本数据源

wv_day.setSkin(WheelView.Skin.Holo); // common皮肤

wv_day.setWheelData(listDay);

wv_day.setSelection(currentDay - 1);

wv_day.setVisibility(View.VISIBLE);

//时

wv_hour.setWheelAdapter(new ArrayWheelAdapter(mContext)); // 文本数据源

wv_hour.setSkin(WheelView.Skin.Holo); // common皮肤

wv_hour.setLoop(true);

wv_hour.setWheelData(listHour);

wv_hour.setSelection(currentHour);

wv_hour.setVisibility(View.VISIBLE);

//分

wv_minute.setWheelAdapter(new ArrayWheelAdapter(mContext)); // 文本数据源

wv_minute.setSkin(WheelView.Skin.Holo); // common皮肤

wv_minute.setLoop(true);

wv_minute.setWheelData(listMinute);

wv_minute.setSelection(currentMinute);

wv_minute.setVisibility(View.VISIBLE);

}

/**

* 用户滑动时更新每个月的天数

*/

private void updateDay() {

//获取当前滑动的位置

selectYear = Integer.parseInt(wv_year.getSelectionItem().toString().replace("年", ""));

selectMonth = Integer.parseInt(wv_month.getSelectionItem().toString().replace("月", ""));

//判断一个月有多少天

int hasDay = getDay(selectYear, selectMonth);

listDay.clear();

for (int i = 1; i <= hasDay; i++) {

listDay.add(String.format("%02d", i) + "日");

}

wv_day.setWheelData(listDay);

}

/**

* 根据是否闰年和月份判断本月的天数

*

* @param year

* @param month

* @return

*/

private int getDay(int year, int month) {

int day = 30;

boolean flag = false;

switch (year % 4) {

case 0:

flag = true;

break;

default:

flag = false;

break;

}

switch (month) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

day = 31;

break;

case 2:

day = flag ? 29 : 28;

break;

default:

day = 30;

break;

}

return day;

}

/**

* 确定按钮监听

*

* @param listener

*/

public void onClickOkBtnLisitener(View.OnClickListener listener) {

tv_dialog_ok.setOnClickListener(listener);

}

/**

* 获取时间

* @return

*/

public String getDate(){

String year = wv_year.getSelectionItem().toString().replace("年","");

String month = wv_month.getSelectionItem().toString().replace("月","");

String day = wv_day.getSelectionItem().toString().replace("日","");

String hour = wv_hour.getSelectionItem().toString().replace("点","");

String minute = wv_minute.getSelectionItem().toString().replace("分","");

return year+"-"+month+"-"+day+" "+hour+":"+minute;

}

/**

* 根据时间戳验证用户选择时间是否合理

* @return

*/

public boolean isValid(){

long time = Long.parseLong(TimeUtil.createTimestamp(getDate()));

if (TimeUtil.getUnixStamp()>time){

return false;

}

return true;

}

}

android 弹窗时间,Android使用WheelView自定义时间选择器弹窗相关推荐

  1. 小程序picker标题_微信小程序实现自定义picker选择器弹窗内容

    微信小程序中定义好的几种picker选择器,不管是日期选择器还是地区选择器,或是其他的都有定死的样式和内容. 例如: 但是大多数开发程序的情况下还是需要自己写样式的,或是内容的. 例如: wxml 选 ...

  2. android自定义滚动日期,Android基于wheelView实现自定义日期选择器

    本文实例为大家分享了Android实现自定义日期选择器的具体代码,供大家参考,具体内容如下 项目要求效果图: 要求 "6月20 星期五" 这一项作为一个整体可以滑动,"7 ...

  3. Android基于wheelView的自定义日期选择器(可拓展样式)

    基于wheelView的自定义日期选择器 项目要求效果图: 要求 "6月20 星期五" 这一项作为一个整体可以滑动,"7时"."48分"分别 ...

  4. Apache DolphinScheduler 海豚调度器自定义时间参数

    在Apache DolphinScheduler 海豚调度器(本文简称:小海豚) 官网中,我们看到其自定义时间的参数是这样介绍的 1.支持代码中自定义变量名,声明方式:${变量名}.可以是引用 &qu ...

  5. android toast 自定义时间,Android Toast自定义显示时间

    Toast是Android中使用频率较高的弹窗提示手段,使用起来简单.方便.常规使用方法这里不做说明,继前一篇博客<Android中Toast全屏显示> ,其中抛砖引玉的给出一个简单的实现 ...

  6. Android自定义时间控件不可选择未来时间

    本文出自:http://blog.csdn.net/dt235201314/article/details/78718066 Android自定义时间控件选择开始时间到结束时间 Android自定义时 ...

  7. android自定义横向时间轴,Android自定义时间轴的实现过程

    本文讲述Android自定义时间轴的实现过程,供大家参考,具体内容如下 时间轴效果,实际上非常简单,就是listView中一个又一个的条目而已-.大家可以只关注一个条目. 首先展示一个条目的布局效果 ...

  8. android时间24小时,安卓时间显示TextClock显示日期时间,24小时制和12小时制(自定义...

    安卓时间显示TextClock显示日期时间,24小时制和12小时制(自定义 安卓时间显示TextClock显示日期时间,24小时制和12小时制(自定义时间) 这个地方的是按24小时制还是12小时制 是 ...

  9. Android自定义时间轴

    本文讲述Android自定义时间轴的实现过程 相关视频链接: Android自定义控件系列 http://edu.csdn.net/course/detail/3719/65396 Android视频 ...

最新文章

  1. android控件的对齐方式
  2. POJ2391 Floyd+离散化+二分+DINIC
  3. 目前电子计算机已经发展到______阶段,《全国高校计算机联合考试广西考区一级笔试试题卷.doc...
  4. 用js做分页,点击下一页时,直接跳到了最后一页——Number()的妙用
  5. Spring Profile模式示例
  6. spring— Spring与Web环境集成
  7. js页面倒计时7天 java_javascript实现倒计时效果
  8. 苹果确认部分iPad Air 3会出现永久性黑屏:可免费维修
  9. Maven多个mudule只编译、打包指定module
  10. 机器视觉专用照明光源
  11. Setinterl全面介绍
  12. python爬虫刷网课答题_python实践:利用爬虫刷网课
  13. hbuilderx运行支付宝小程序
  14. 地理空间框架(二):大地水准面、似大地水准面、参考椭球面
  15. postgresql表复制
  16. 【长难句分析精讲】并列结构
  17. 在JDBC中实现SQL语句的模糊查询
  18. Android获取软键盘输入内容
  19. School:1靶机
  20. 树莓派安装synology_如何从Synology NAS安装(和删除)应用程序包

热门文章

  1. TF-IDF算法讲解
  2. php随机获取文件夹,php从文件夹随机读取文件的方法
  3. InfluxData【付诸实践 01】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
  4. Spring Boot2.0 JPA 实现分页(简单查询分页、复杂查询分页)
  5. ElasticSearch集群部署【windows+Linux双系统搭建】
  6. LeetCode 26 删除有序数组中的重复项
  7. Traffic Simulator Applet(交通模拟器小程序)
  8. PHP——访问网站根目录解决方案
  9. 丑数 Humble Numbers
  10. 粗题⼈不考你没学过的算法