📌  相关文章
📜  Android 中的 Material Design 时间选择器(1)

📅  最后修改于: 2023-12-03 15:29:21.519000             🧑  作者: Mango

Android 中的 Material Design 时间选择器

在Android开发中,时间选择器是一个很常见的功能,而Material Design风格的时间选择器在UI和交互方面都有很好的表现。本文将介绍如何使用Android中的Material Design时间选择器。

Material DateTime Picker库

Material DateTime Picker是一个由Wdullaer(William)开发的库,它提供了Date Picker、Time Picker、Date & Time Picker三种模式。这个库支持Android 4.0及以上版本。

Material DateTime Picker库可以通过以下方式引入到你的项目中:

dependencies {
     implementation 'com.wdullaer:materialdatetimepicker:4.3.0'
}
Date Picker

Date Picker模式可以让用户选择一个日期。

代码实现:

DatePickerDialog datePickerDialog = new DatePickerDialog(this,
        (view, year, month, dayOfMonth) -> {
            // TODO 选择日期后的逻辑处理
        },
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
datePickerDialog.show();

效果:

Date Picker

Time Picker

Time Picker模式可以让用户选择一个时间。

代码实现:

TimePickerDialog timePickerDialog = new TimePickerDialog(this,
        (view, hourOfDay, minute) -> {
            // TODO 选择时间后的逻辑处理
        },
        Calendar.getInstance().get(Calendar.HOUR_OF_DAY),
        Calendar.getInstance().get(Calendar.MINUTE),
        true);
timePickerDialog.show();

效果:

Time Picker

Date & Time Picker

Date & Time Picker模式可以让用户选择一个日期和时间。

代码实现:

Calendar now = Calendar.getInstance();
DatePickerDialog.OnDateSetListener dateSetListener = (view, year, monthOfYear, dayOfMonth) -> {
    Calendar selectedDate = Calendar.getInstance();
    selectedDate.set(Calendar.YEAR, year);
    selectedDate.set(Calendar.MONTH, monthOfYear);
    selectedDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);

    TimePickerDialog.OnTimeSetListener timeSetListener = (view1, hourOfDay, minute) -> {
        Calendar selectedTime = Calendar.getInstance();
        selectedTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
        selectedTime.set(Calendar.MINUTE, minute);

        // TODO 选择日期和时间后的逻辑处理
    };

    TimePickerDialog timePickerDialog = new TimePickerDialog(this, timeSetListener,
            now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), true);
    timePickerDialog.show();
};

DatePickerDialog datePickerDialog = new DatePickerDialog(this, dateSetListener,
        now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
datePickerDialog.show();

效果:

Date & Time Picker

自定义Material DateTime Picker

Material DateTime Picker提供了很多自定义选项,可以通过代码实现来配置。

下文展示了如何自定义一个Date Picker,其他模式也可以类似实现。

代码实现:

Calendar now = Calendar.getInstance();
DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
                // TODO 选择日期后的逻辑处理
            }
        },
        now.get(Calendar.YEAR),
        now.get(Calendar.MONTH),
        now.get(Calendar.DAY_OF_MONTH));
datePickerDialog.setMinDate(Calendar.getInstance());
datePickerDialog.setVersion(DatePickerDialog.Version.VERSION_2);
datePickerDialog.setOkColor(ContextCompat.getColor(this, R.color.colorPrimary));
datePickerDialog.setCancelColor(ContextCompat.getColor(this, R.color.colorPrimary));
datePickerDialog.show(getSupportFragmentManager(), "DatePickerDialog");

效果:

Custom Date Picker

总结

Material DateTime Picker库提供了很好的Material Design风格的时间选择器,可以方便开发者实现日期和时间的选择功能。通过加入自定义选项,可以使时间选择器更加符合业务需求。