优美的日期选择器
开发的一个问题,手机端同样的功能,好看的界面,好的用户体验肯定更佳。最近项目中要使用到日期的选择,本来说用系统自带的(DataPicker或DatePickerDialog)组件,但产品经理需要炫酷的。作为新手的我,第一个想到的是第三方库,有些炫酷的,但是不存在我需求刚刚好的,所以我就选了一个有library的去改原码的样式,OK。
DataPicker
- 常用属性
android:calendarViewShown
设置该日期选择器是否显示CalendarView组件
android:endYear
设置日期选择器允许选择的最后一年
android:startYear
设置日期选择器允许选择的第一年
android:maxDate
设置该日期选择器支持的最大日期。以mm/dd/yyyy格式指定最大日期
android:minDate
设置该日期选择器支持的最小日期。以mm/dd/yyyy格式指定最小日期
android:spinnersShown
设置该日期选择器是否显示Spinner日期选择组件 - 使用
2.1 xml的写法
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:calendarViewShown="true"
android:endYear="2016"
android:spinnersShown="true"
android:startYear="2000" />
2.2 MainActivity
// 获取当前年、月、日、时、分
c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MARCH);
day = c.get(Calendar.DAY_OF_MONTH);
hour = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
datePicker = (DatePicker) findViewById(R.id.datePicker);
// 初始化DatePicker组件,初始化时指定监听器
datePicker.init(year, month, day, new OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
//月的值0-11,所以需要加一
monthOfYear = monthOfYear+1;
Toast.makeText(mContext,
year + "-" + monthOfYear + "-" + dayOfMonth,
Toast.LENGTH_SHORT).show();
}
});
2.3 效果
DatePickerDialog
通过new关键字创建DatePickerDialog的实例,调用它的show()方法即可将日期选择对话框显示出来
//放在了点击事件里面,弹出对话框
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 直接创建一个DatePickDialog对话框实例,并将它显示出来
new DatePickerDialog(mContext, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
monthOfYear = monthOfYear + 1;
Toast.makeText(mContext,
year + "-" + monthOfYear + "-" + monthOfYear,
Toast.LENGTH_SHORT).show();
}
// 设置初始值--通过Calendar.getInstance()获取当前日期
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c
.get(Calendar.DAY_OF_MONTH)).show();
}
});
效果
第三方的
下面的那个按钮很可以很方便的定制
因为我只需要用到日期选择,为了是apk的包不那么臃肿,所以我就只抽取的日期选择的代码出来时用,同时方便在他的代码上面修改。
demo地址