Ответ Игоря мне очень помог.Но я хотел бы добавить, что вы можете столкнуться с NoSuchMethodException
, как указал DoubleK, потому что в некоторых версиях TimePicker
и DatePicker
существуют отдельные классы, такие как TimePickerSpinnerDelegate
и DatePicker.DatePickerSpinnerDelegate
, которые содержат эти переменные и методы. Вот как я обновил сборщиков (для API 14+):
private void initPicker(Object object, String[] values) {
try {
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
// If there's a delegate, we use it instead.
if (field.getName().equals("mDelegate")) {
field.setAccessible(true);
object = field.get(object);
fields = object.getClass().getDeclaredFields();
break;
}
}
for (Field field : fields) {
if (field.getName().equals("mAmPmStrings") ||
field.getName().equals("mShortMonths")) {
field.setAccessible(true);
field.set(object, values);
} else if (field.getName().equals("mAmPmSpinner") ||
field.getName().equals("mMonthSpinner")) {
field.setAccessible(true);
Object innerObject = field.get(object);
Method method = innerObject.getClass().getDeclaredMethod(
"setDisplayedValues", String[].class);
method.setAccessible(true);
method.invoke(innerObject, (Object) values);
}
}
Method[] methods = object.getClass().getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals("updateAmPmControl") ||
method.getName().equals("updateSpinners")) {
method.setAccessible(true);
method.invoke(object);
break;
}
}
} catch (Exception e) {
Log.e(APP_TAG, e.getMessage(), e);
}
}
Так что я просто называю
initPicker(timePicker, resources.getStringArray(R.array.am_pm));
и
initPicker(datePicker, resources.getStringArray(R.array.calendar_months));
после представления создаются и все работает, как ожидалось.
Можете ли вы дать мне французскую аббревиатуру этого примера, о котором вы упомянули? – Tobrun
Я точно не знаю, но может быть «Ven 21 Nov 2014» – begiPass
DatePicker использует настройки языка по умолчанию для телефона. Зачем вам это менять? Если телефон настроен на французский, формат будет во французском формате. – Nfear