Android DatePicker 设置年月日为 Spinner 形式
要将 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 形式了。
原文地址: http://www.cveoy.top/t/topic/pb7M 著作权归作者所有。请勿转载和采集!