DateTimePicker改写学习
2015-11-22 15:19
453 查看
这两天自己在做项目的时候需要用到时间选择器,但系统自带的日期选择器和时间选择器是分开的,不太符合我想要的东西,,所以作为一个新手自然就是找找看有没有demo可以拿来参照学习改改啦~~
像这种日期和时间做在一起的例子网上还是不少的,但是找下来有些总是要自己改改。。这些都是废话啦,我写这篇博客主要是想要记录一下我所遇到的问题。
网上找的demo里这6个文件基本上是不用动了 ,如果是要改样式的话就要自定义shape还有layer-list进去wheelview里面改咯
![](http://img.blog.csdn.net/20151122145206127)
由于人家的demo都是把年月日时分这些初始化和监听事件写在了mainactivity里,所以我就想要自己把它们搞到一个类里面,做成像工具类那样的。
![](http://img.blog.csdn.net/20151122145840618)
就直接这么调用就可以了
![](http://img.blog.csdn.net/20151122150111907)
最终修改后的结果就是
![](http://img.blog.csdn.net/20151122150626099)
![](http://img.blog.csdn.net/20151122150530098)
![](http://img.blog.csdn.net/20151122151017067)
改成
![](http://img.blog.csdn.net/20151122151045667)
就是不再通过那个View 直接把getTimePick放进去结果就是 选择不同月份的时候 日 不会再改变,返回回来的日期就是弹窗弹出来的日期 不管选择什么日期都不会改变。
就像这样。。。。!
![](http://img.blog.csdn.net/20151122151411653)
![](http://img.blog.csdn.net/20151122151504624)
会出现这个问题的原因在于:
如果直接填getTimePick(),那么menuWindow在实例化的时候和showAtLocation的时候两个view是不一样的
所以要在前面使用一个View来接收,这样子设置进去的view才是同一个.
本文链接:http://blog.csdn.net/lang523493505/article/details/49978051
像这种日期和时间做在一起的例子网上还是不少的,但是找下来有些总是要自己改改。。这些都是废话啦,我写这篇博客主要是想要记录一下我所遇到的问题。
网上找的demo里这6个文件基本上是不用动了 ,如果是要改样式的话就要自定义shape还有layer-list进去wheelview里面改咯
由于人家的demo都是把年月日时分这些初始化和监听事件写在了mainactivity里,所以我就想要自己把它们搞到一个类里面,做成像工具类那样的。
就直接这么调用就可以了
这个是ShowDTPicker 的代码-----这边是没有问题的代码 package com.kaka.picker.activity; import java.util.Calendar; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.PopupWindow; import android.widget.Toast; import android.widget.PopupWindow.OnDismissListener; import com.kaka.picker.widget.NumericWheelAdapter; import com.kaka.picker.widget.OnWheelChangedListener; import com.kaka.picker.widget.WheelView; import com.kakal.datetimepicker.R; public class ShowDTPicker { Context context; private PopupWindow menuWindow; private LayoutInflater inflater = null; private WheelView year; private WheelView month; private WheelView day; private WheelView hour; private WheelView mins; private int curYear; private int curMonth; private int curDate; private int curHour; private int curMins; private int changeYear; private int changeMonth; public ShowDTPicker(Context context) { // TODO Auto-generated constructor stub this.context = context; inflater = LayoutInflater.from(context); } /** * 初始化popupWindow * * @param view */ public void showPopwindow() { View view = getTimePick(); menuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); menuWindow.setFocusable(true); menuWindow.setBackgroundDrawable(new BitmapDrawable()); menuWindow.showAtLocation(view, Gravity.CENTER_HORIZONTAL, 0, 0); menuWindow.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { menuWindow = null; } }); } /** * * @return */ private View getTimePick() { Calendar c = Calendar.getInstance(); curYear = c.get(Calendar.YEAR); curMonth = c.get(Calendar.MONTH) + 1; curDate = c.get(Calendar.DATE); curHour = c.get(Calendar.HOUR_OF_DAY); curMins = c.get(Calendar.MINUTE); changeYear = curYear; changeMonth = curMonth; View view = inflater.inflate(R.layout.timepick, null); year = (WheelView) view.findViewById(R.id.year); year.setAdapter(new NumericWheelAdapter(curYear, curYear + 20)); year.setLabel("年"); year.setCyclic(false); year.addChangingListener(changedListener); month = (WheelView) view.findViewById(R.id.month); month.setAdapter(new NumericWheelAdapter(1, 12)); month.setLabel("月"); month.setCyclic(false); month.addChangingListener(changedListener); day = (WheelView) view.findViewById(R.id.day); day.setLabel("日"); day.setCyclic(false); hour = (WheelView) view.findViewById(R.id.hour); hour.setAdapter(new NumericWheelAdapter(0, 23)); hour.setLabel("时"); hour.setCyclic(false); mins = (WheelView) view.findViewById(R.id.mins); mins.setAdapter(new NumericWheelAdapter(00, 59, "%02d")); mins.setLabel("分"); mins.setCyclic(false); year.setCurrentItem(curYear); month.setCurrentItem(curMonth - 1); day.setCurrentItem(curDate - 1); hour.setCurrentItem(curHour); mins.setCurrentItem(curMins); initDay(curYear, curMonth); Button bt = (Button) view.findViewById(R.id.set); bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String str = (year.getCurrentItem() + curYear) + "-" + (month.getCurrentItem() + 1) + "-" + (day.getCurrentItem() + 1) + " " + hour.getCurrentItem() + ":" + mins.getCurrentItem(); Toast.makeText(context, str, Toast.LENGTH_LONG).show(); menuWindow.dismiss(); } }); Button cancel = (Button) view.findViewById(R.id.cancel); cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { menuWindow.dismiss(); } }); return view; } OnWheelChangedListener changedListener = new OnWheelChangedListener() { @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { switch (wheel.getId()) { case R.id.year: changeYear = newValue + curYear; break; case R.id.month: changeMonth = newValue + 1; break; default: break; } initDay(changeYear, changeMonth); } }; /** * * @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; } System.out.println(day); return day; } /** * * @param changeYear * @param changeMonth */ private void initDay(int changeYear, int changeMonth) { day.setAdapter(new NumericWheelAdapter(1, getDay(changeYear, changeMonth), "%02d")); System.out.println(getDay(changeYear, changeMonth)); } }
最终修改后的结果就是
主要遇到的问题在这里
但是如果我把代码改一下改成
就是不再通过那个View 直接把getTimePick放进去结果就是 选择不同月份的时候 日 不会再改变,返回回来的日期就是弹窗弹出来的日期 不管选择什么日期都不会改变。
就像这样。。。。!
会出现这个问题的原因在于:
如果直接填getTimePick(),那么menuWindow在实例化的时候和showAtLocation的时候两个view是不一样的
所以要在前面使用一个View来接收,这样子设置进去的view才是同一个.
本文链接:http://blog.csdn.net/lang523493505/article/details/49978051
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories