项目需要,整理一个同时选择日期和时间的控件。
效果图:
这里直接写成一个Dialog类,便于集成到项目中。下面直接贴出主要实现代码 DateTimeDialog:
public class DateTimeDialog {
private Context context;
private Dialog dialog;
private static int START_YEAR = 1990, END_YEAR = 2100;
private DateTimeChange dateTimeChange;
public DateTimeDialog(Context context) {
this.context = context;
}
public void init(Calendar calendar) {
if (calendar == null) {
calendar = Calendar.getInstance();
}
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
// 添加大小月月份并将其转换为list,方便之后的判断
String[] months_big = {
"1", "3", "5", "7", "8", "10", "12"};
String[] months_little = {
"4", "6", "9", "11"};
final List<String> list_big = Arrays.asList(months_big);
final List<String> list_little = Arrays.asList(months_little);
dialog = new Dialog(context);
dialog.setTitle("请选择日期与时间");
// 找到dialog的布局文件
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.time_layout, null);
// 年
final WheelView wv_year = (WheelView) view.findViewById(R.id.year);
wv_year.setAdapter(new NumericWheelAdapter(START_YEAR, END_YEAR));// 设置"年"的显示数据
wv_year.setCyclic(true);// 可循环滚动
wv_year.setLabel("年");// 添加文字
wv_year.setCurrentItem(year - START_YEAR);// 初始化时显示的数据
// 月
final WheelView wv_month = (WheelView) view.findViewById(R.id.month);
wv_month.setAdapter(new NumericWheelAdapter(1, 12));
wv_month.setCyclic(true);
wv_month.setLabel("月");
wv_month.setCurrentItem(month);