You can also use some simple reflection to hide the day and month of the NumberPickerwidget DatePicker. Please note that this may stop working if Google decides to rename member field names. In addition, this approach makes sense when used android:datePickerMode="spinner".
DatePicker datepicker = ...
findAndHideField(datepicker, "mDayPicker");
findAndHideField(datepicker, "mMonthPicker");
findAndHideField(datepicker, "mDaySpinner");
findAndHideField(datepicker, "mMonthSpinner");
final Object mDatePickerDelegate = findFieldInstance(picker, "mDelegate");
findAndHideField(mDatePickerDelegate, "mDaySpinner");
findAndHideField(mDatePickerDelegate, "mMonthSpinner");
private static void findAndHideField(Object object, String name) {
try {
final Field field = object.getClass().getDeclaredField(name);
field.setAccessible(true);
final View fieldInstance = (View) field.get(object);
fieldInstance.setVisibility(View.GONE);
} catch (Exception e) {
e.printStackTrace();
}
}
private static Object findFieldInstance(DatePicker datepicker, String name) {
try {
final Field field = DatePicker.class.getDeclaredField(name);
field.setAccessible(true);
return field.get(datepicker);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Update: Added code illustrating how this approach works with Android Lollipop 5.0 (API 21 +).
. , , ( , Android 3.0 , Android 5.0).