在Android日历视图中首先显示年份select

棒棒糖后,DatePicker有一个非常漂亮的日历selectdate。 但问题是select年份。 大部分老百姓都面临着挑选年份的困扰。 他们只是滚动。 滚动更换年份需要很长的时间。 所以我需要显示年select第一次打开Datepicker对话框在Android中。

Datepicker通常打开如下:

在这里输入图像说明

但是应该从一年的select开始。 像下面一样:

在这里输入图像说明

  • 如何将DatePicker小部件与其他日历系统一起提供?
  • 只有date和月份的Androiddateselect器
  • 如何只用月份和年份字段显示android的日期选择器?
  • 能够在dateselect器中设置最大date时select将来的date
  • Android:如何将DatePicker视图date格式从MM / dd / yyyy更改为dd / MM / yyyy?
  • calendarViewShown在Android 5.0 Lollipop上没有被尊重
  • 如何在DatePicker中设置当前date?
  • DatePickerDialog错误地强制实施1970年1月1日的最低date
  • 你可以得到年份视图的参考,然后模拟用户点击打开它。

    dataPicker.getTouchables().get( 0 ).performClick(); 

    更新:如果不清楚,我会解释每一步。 你需要先有datePicker引用。 使用datePicker引用,您可以使用getTouchables()方法获取datePicker组件。 组件年是在第一个地方,所以需要调用.get(0)来获得一年的参考。 之后,只需模拟用户点击开始在开始年视图,而不是等待用户点击它。

    有没有非常可靠的方法来做到这一点:

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DatePicker datePicker = (DatePicker) findViewById(R.id.test); openYearView(datePicker); } private void openYearView(DatePicker datePicker) { try { Field mDelegateField = datePicker.getClass().getDeclaredField("mDelegate"); mDelegateField.setAccessible(true); Object delegate = mDelegateField.get(datePicker); Method setCurrentViewMethod = delegate.getClass().getDeclaredMethod("setCurrentView", int.class); setCurrentViewMethod.setAccessible(true); setCurrentViewMethod.invoke(delegate, 1); } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { } }