要将 Android 的 DatePicker 设置为年月日都是 Spinner 形式,可以使用自定义的 DatePickerDialog 来实现。

首先,创建一个自定义的 DatePickerDialog 类,继承自 DatePickerDialog,并重写 onCreate 方法:

public class CustomDatePickerDialog extends DatePickerDialog {

    public CustomDatePickerDialog(Context context, OnDateSetListener listener, int year, int month, int dayOfMonth) {
        super(context, listener, year, month, dayOfMonth);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.custom_date_picker_dialog);

        // 设置年份、月份、日期的 Spinner 显示
        DatePicker datePicker = getDatePicker();
        NumberPicker yearPicker = findNumberPicker(datePicker, 'mYearSpinner');
        NumberPicker monthPicker = findNumberPicker(datePicker, 'mMonthSpinner');
        NumberPicker dayPicker = findNumberPicker(datePicker, 'mDaySpinner');

        if (yearPicker != null) {
            yearPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
        }
        if (monthPicker != null) {
            monthPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
        }
        if (dayPicker != null) {
            dayPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
        }
    }

    private NumberPicker findNumberPicker(ViewGroup viewGroup, String name) {
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            View child = viewGroup.getChildAt(i);
            if (child instanceof NumberPicker) {
                NumberPicker numberPicker = (NumberPicker) child;
                if (numberPicker.toString().contains(name)) {
                    return numberPicker;
                }
            } else if (child instanceof ViewGroup) {
                NumberPicker result = findNumberPicker((ViewGroup) child, name);
                if (result != null) {
                    return result;
                }
            }
        }
        return null;
    }
}

接下来,在布局文件 custom_date_picker_dialog.xml 中定义一个 DatePicker,将年、月、日的显示方式设置为 Spinner:

<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:datePickerMode="spinner"
    android:calendarViewShown="false" />

最后,在需要使用 DatePicker 的地方,使用自定义的 DatePickerDialog 替代系统的 DatePickerDialog:

CustomDatePickerDialog datePickerDialog = new CustomDatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        // 处理选中的日期
    }
}, currentYear, currentMonth, currentDay);
datePickerDialog.show();

这样就可以将 Android 的 DatePicker 设置为年月日都是 Spinner 形式了。

Android DatePicker 设置年月日为 Spinner 形式

原文地址: http://www.cveoy.top/t/topic/pb7M 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录