在Lollipop之后,DatePicker有一个非常漂亮的日历视图来选择日期.但问题是选择年份.大多数普通人在选择年份时遇到麻烦.他们只是滚动.滚动更改年份需要很长时间.因此我需要在android中打开Datepicker Dialog时首先显示年份选择.
Datepicker通常打开如下:
但它应该从年份选择开始.如下所示:
Mat*_*sav 24
您可以获得对年视图的引用,然后只需模拟用户单击即可打开它.
dataPicker.getTouchables().get( 0 ).performClick();
Run Code Online (Sandbox Code Playgroud)
更新:如果不清楚,我将解释每一步.您需要先拥有datePicker引用.使用datePicker引用,您可以使用getTouchables()方法获取datePicker组件.组件年份位于第一位,因此需要调用.get(0)来获取对年份的引用.之后只需模拟用户点击即可在开始时打开多年视图,而不是等待用户点击它.
小智 5
在@MatejVukosav答案上扩展
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
LogUtil.LogToConsole(TAG, "Date picker select");
datePickerDialog.getDatePicker().getTouchables().get(1).performClick();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
LogUtil.LogToConsole(TAG, "Date picker select post lollipop");
datePickerDialog.getDatePicker().getTouchables().get(0).performClick();
}
Run Code Online (Sandbox Code Playgroud)
然后显示对话框。
没有非常可靠的方法来做到这一点:
@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) {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6089 次 |
| 最近记录: |