最近因项目需要,要做一个日期时间选择器,平时做日期时间选择器都是用的系统提供的DatePicker,TimePicker.他们两个的使用方法简单我就不做过多的介绍。但是你如果想在DatePicker上面加上自定义的样式却比较复杂,在网上搜索了一下之后,感觉比较复杂,所以打算自定一个日期时间选择器。
先贴一张日期时间选择器的效果图,如下:
- 自定义Dialog
- 使用NumberPicker绘制选择器
- 控制时间选择的范围
自定义Dialog
自定义Dialog的好处是界面布局可以自由的绘制,它的自由度高。只需设置好dialog的宽高,以及显示的位置自定义定义Dialog的代码比较简单,这里主要是构造方法部分的代码。相信你看一下就会明白,如下所示:
public MyCalendarDialog(Context context, int width, int height, int layout,
int style) {
super(context, style);
// 设置内容
view = LayoutInflater.from(context).inflate(layout,null);
setContentView(view);
this.context = context;
// 设置窗口属性
Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
// 设置宽度、高度、密度、对齐方式
float density = getDensity(context);
params.width = (int) (width * density);
params.height = (int) (height * density);
params.gravity = Gravity.CENTER;
window.setAttributes(params);
initData();
initView();
}
/**
* 获取显示密度
*
* @param context
* @return
*/
public float getDensity(Context context) {
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
return dm.density;
}
使用NumberPicker绘制选择器
NumberPicker的效果和DatePicker类似,只是他只包含显示没有里面逻辑控制等的代码。下面xml文件部
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/shape_white"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<NumberPicker
android:id="@+id/np_year"
android:layout_width="0dp"
android:layout_weight="1.3"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content">
</NumberPicker>
<NumberPicker
android:id="@+id/np_month"
android:layout_width="0dp"
android:layout_weight="0.8"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height=