android 日期时间选择器
2016-06-15 17:06
477 查看
在做项目时,需要使用时间选择器,找了DatePickerDialog来选择显示日期时间。在这总结一下怎么去使用和遇到的一些问题及解决方法
首先需要两个类:DateTimePicker.java DateTimePickerDialog.java。包括dialog的布局和实现回掉方法。
DateTimePicker.java
DateTimePickerDialog.java
剩下的就是在activity中使用了
这样一个时间选择器就添加好了,可在这遇到一个问题,我的显示是这样的,好难看。。
查了一下,发现原因是在AndroidManifest.xml中,
activity的theme是android:theme=”@android:style/Theme.NoTitleBar”,在这种theme下的样式难看。
将样式改为android:theme=”@android:style/Theme.Holo.Light”就行了
首先需要两个类:DateTimePicker.java DateTimePickerDialog.java。包括dialog的布局和实现回掉方法。
DateTimePicker.java
public class DateTimePicker extends FrameLayout { private final NumberPicker mDateSpinner; private final NumberPicker mHourSpinner; private final NumberPicker mMinuteSpinner; private Calendar mDate; private int mHour,mMinute; private String[] mDateDisplayValues = new String[7]; private OnDateTimeChangedListener mOnDateTimeChangedListener; public DateTimePicker(Context context) { super(context); mDate = Calendar.getInstance(); mHour=mDate.get(Calendar.HOUR_OF_DAY); mMinute=mDate.get(Calendar.MINUTE); inflate(context, R.layout.datedialog, this); mDateSpinner=(NumberPicker)this.findViewById(R.id.np_date); mDateSpinner.setMinValue(0); mDateSpinner.setMaxValue(6); updateDateControl(); mDateSpinner.setOnValueChangedListener(mOnDateChangedListener); mHourSpinner=(NumberPicker)this.findViewById(R.id.np_hour); mHourSpinner.setMaxValue(23); mHourSpinner.setMinValue(0); mHourSpinner.setValue(mHour); mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); mMinuteSpinner=(NumberPicker)this.findViewById(R.id.np_minute); mMinuteSpinner.setMaxValue(59); mMinuteSpinner.setMinValue(0); mMinuteSpinner.setValue(mMinute); mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); } private NumberPicker.OnValueChangeListener mOnDateChangedListener=new OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mDate.add(Calendar.DAY_OF_MONTH, newVal - oldVal); updateDateControl(); onDateTimeChanged(); } }; private NumberPicker.OnValueChangeListener mOnHourChangedListener=new OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mHour=mHourSpinner.getValue(); onDateTimeChanged(); } }; private NumberPicker.OnValueChangeListener mOnMinuteChangedListener=new OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mMinute=mMinuteSpinner.getValue(); onDateTimeChanged(); } }; private void updateDateControl() { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, -7 / 2 - 1); mDateSpinner.setDisplayedValues(null); for (int i = 0; i < 7; ++i) { cal.add(Calendar.DAY_OF_YEAR, 1); mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); } mDateSpinner.setDisplayedValues(mDateDisplayValues); mDateSpinner.setValue(7 / 2); mDateSpinner.invalidate(); } public interface OnDateTimeChangedListener { void onDateTimeChanged(DateTimePicker view, int year, int month, int day,int hour,int minute); } public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { mOnDateTimeChangedListener = callback; } private void onDateTimeChanged() { if (mOnDateTimeChangedListener != null) { mOnDateTimeChangedListener.onDateTimeChanged(this, mDate.get(Calendar.YEAR), mDate.get(Calendar.MONTH), mDate.get(Calendar.DAY_OF_MONTH),mHour, mMinute); } } }
DateTimePickerDialog.java
public class DateTimePickerDialog extends AlertDialog implements OnClickListener { private DateTimePicker mDateTimePicker; private Calendar mDate = Calendar.getInstance(); private OnDateTimeSetListener mOnDateTimeSetListener; @SuppressWarnings("deprecation") public DateTimePickerDialog(Context context, long date) { super(context); mDateTimePicker = new DateTimePicker(context); setView(mDateTimePicker); mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { @Override public void onDateTimeChanged(DateTimePicker view, int year, int month, int day, int hour, int minute) { mDate.set(Calendar.YEAR, year); mDate.set(Calendar.MONTH, month); mDate.set(Calendar.DAY_OF_MONTH, day); mDate.set(Calendar.HOUR_OF_DAY, hour); mDate.set(Calendar.MINUTE, minute); mDate.set(Calendar.SECOND, 0); updateTitle(mDate.getTimeInMillis()); } }); setButton("设置", this); setButton2("取消", (OnClickListener)null); mDate.setTimeInMillis(date); updateTitle(mDate.getTimeInMillis()); } public interface OnDateTimeSetListener { void OnDateTimeSet(AlertDialog dialog, long date); } private void updateTitle(long date) { int flag = DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY| DateUtils.FORMAT_SHOW_TIME; setTitle(DateUtils.formatDateTime(this.getContext(), date, flag)); } public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) { mOnDateTimeSetListener = callBack; } public void onClick(DialogInterface arg0, int arg1) { if (mOnDateTimeSetListener != null) { mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis()); } } }
剩下的就是在activity中使用了
DateTimePickerDialog dialog = new DateTimePickerDialog(this, System.currentTimeMillis()); dialog.setOnDateTimeSetListener(new OnDateTimeSetListener() { public void OnDateTimeSet(AlertDialog dialog, long date) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(date); Toast.makeText(getApplication(), dateString, Toast.LENGTH_SHORT).show(); } }); dialog.show();
这样一个时间选择器就添加好了,可在这遇到一个问题,我的显示是这样的,好难看。。
查了一下,发现原因是在AndroidManifest.xml中,
activity的theme是android:theme=”@android:style/Theme.NoTitleBar”,在这种theme下的样式难看。
将样式改为android:theme=”@android:style/Theme.Holo.Light”就行了
相关文章推荐
- 使用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