android+选择日期格式,Android时间选择器

文末提供源码下载地址!!!

效果见图:

dc7bb80220dd979f2b607a2e9f95fe0f.gif

对于gif的录制,采用的是LICEcap软件,mac,windows都可以。

对于这个选择器,主要的几个功能的实现:

1. 时间的处理

主要用的是Calendar类,可以方便的对日期进行加减。

获取实例:

_currentCalendar = Calendar.getInstance();

计算日期的加减发:

_currentCalendar.add(Calendar.YEAR,+1);

_currentCalendar.add(Calendar.MONTH,-1);

时间的显示:

每一个方框中都是一个TextView,分别获取年,月,日,时,分设置在TextView上,获取时间的方法:

calendar.get(Calendar.YEAR)//获取年份

需要注意的是月份在获取的时候是少一个月的,比如现在是10月,当调用

calendar.get(Calendar.MONTH)

的时候返回的是9.

2.时间的显示格式,12H和24H

因为本例中需要处理12H格式和24H格式,文中采用的是:

DateFormat.is24HourFormat(getDialog().getContext())

通过调用这个方法,得到系统中用户设定默认的时间格式。返回true即为24小时格式。

当用户在时间选择器上选择12H时,用以下方法来保证小时部分显示正确:

int h = (calendar.get(Calendar.HOUR_OF_DAY)+12)%12;

if(h==0){

h = 12;

}

简单粗暴。

3.dialog在界面上显示的大小

开发中经常碰到dilog不能理想的显示的问题,本例中自定义了一个DialogFragment,在Dialog的onStart方法中调用以下代码,可以设置dialog相对于界面的大小比例:

public void onStart() {

super.onStart();

DisplayMetrics dm = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

//设置dialog在界面上所在宽高占比0.75 0.5

getDialog().getWindow().setLayout((int) (dm.widthPixels * 0.75), (int) (dm.widthPixels * 0.5));

}

文中设置宽度为全屏的3/4,高度为全屏的1/2。

最后说下大体思路:

主Activity的布局文件中只有一个按钮,用来出发Dialog。自定义了一个DataPickerDialog,继承自DialogFragment,它有一个监听,在DataPickerDialog中定义了一个接口,用来处理弹框中的确定和取消事件。onSure方法中可以得到当前时间(用Calendar承载的)和当前值的时间格式,String类型,在DataPickerDialog中有定义。

DataPickerDialog.java中主要设置一些按钮的监听。确认取消键提供接口共外部使用。这个Dialog布局的的中间一些调节时间的上下按键设置响应事件。如果一个一个find的话太麻烦了,其实六个是一样的,可以再封装一次。于是自定义一个DataPickerItemView。另外,这个文件中对时间进行统一处理:

@Override

public void onItemUpPress(View v) {

switch (v.getId()){

case R.id.data_picker_item_year:

_currentCalendar.add(Calendar.YEAR,+1);

break;

case R.id.data_picker_item_month:

_currentCalendar.add(Calendar.MONTH,+1);

break;

case R.id.data_picker_item_day:

_currentCalendar.add(Calendar.DAY_OF_MONTH,+1);

break;

case R.id.data_picker_item_hour:

_currentCalendar.add(Calendar.HOUR_OF_DAY,+1);

break;

case R.id.data_picker_item_min:

_currentCalendar.add(Calendar.MINUTE,+1);

break;

case R.id.data_picker_item_format:

switchFormat();

break;

default:

}

setCurrentDate(_currentCalendar,_currentFormat);

}

@Override

public void onItemBottomPress(View v) {

switch (v.getId()){

case R.id.data_picker_item_year:

_currentCalendar.add(Calendar.YEAR,-1);

break;

case R.id.data_picker_item_month:

_currentCalendar.add(Calendar.MONTH,-1);

break;

case R.id.data_picker_item_day:

_currentCalendar.add(Calendar.DAY_OF_MONTH,-1);

break;

case R.id.data_picker_item_hour:

_currentCalendar.add(Calendar.HOUR_OF_DAY,-1);

break;

case R.id.data_picker_item_min:

_currentCalendar.add(Calendar.MINUTE,-1);

break;

case R.id.data_picker_item_format:

switchFormat();

break;

default:

}

setCurrentDate(_currentCalendar,_currentFormat);

}

DataPickerItemView.java有三个控件两个ImageButton,一个TextView,提供方法setText(Object number)来设置需要显示的数字。在组件中提供上下两个ImageButton点击事件的接口,传出参数为DataPickerItemView这个View,以方便在DataPickerDialog.java中集中处理时间的变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值