Как отключить CalendarView в DatePicker?

На моем экране настроек у меня есть виджет выбора даты. В дизайнере в Eclipse он показывает, как я хочу (3 прядильника для DMY), но когда я тестирую свое устройство, я получаю довольно странное представление с боковым поворотником слева и календарем справа. Никогда не видел этого раньше (!), Но, проводя некоторые исследования, я думаю, что вижу «CalendarView».

Я обнаружил, что мне нужно установить свойство «calendarViewShown» в false, но мой XML выдает ошибку с этим. Я нашел здесь еще один вопрос, который предполагал, что уровень API был виноват (мой minSDKLevel равен 7, но я нацелен на 11, чтобы я мог получить кнопку панели действий, а не меню oldskool). Поэтому я подумал, что попробую установить его в коде:

int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= 11) minDateSelector.setCalendarViewShown = false; 

Но опять же, этот fail-setCalendarViewShown не найден. Но в документах сказано, что оно должно существовать. Есть идеи?!

Solutions Collecting From Web of "Как отключить CalendarView в DatePicker?"

Если вы ориентируетесь на более позднюю версию API, вы можете использовать следующий XML (не нужно писать код Java) в <DatePicker> :

  android:calendarViewShown="false" 

Метод в DatePicker

  public void setCalendarViewShown (boolean shown) 

Существует, начиная с API 11. Если вы minSdkLevel = 7, компилятор не распознает это как допустимый метод – этот метод не существует на Android 2.3 или 2.2. Лучшим способом решения этой проблемы является использование рефлексии. Что-то вроде этого должно работать должным образом:

 int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= 11) { try { Method m = minDateSelector.getClass().getMethod("setCalendarViewShown", boolean.class); m.invoke(minDateSelector, false); } catch (Exception e) {} // eat exception in our case } 

В тех случаях я использую

 import android.os.Build; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void someThing() { [...] if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { minDateSelector.setCalendarViewShown(false); } } 

Я считаю, что читаемость лучше, чем использование рефлексии, и стиль лучше, чем улов и игнорирование исключений. Конечно, работа над отражением тоже работает.

Я работал с следующей конфигурацией XML:

 android:datePickerMode="spinner" android:calendarViewShown="false" 

Для меня не работала только следующая конфигурация:

 android:calendarViewShown="false" 

У меня была такая же проблема, как и вы, я не мог заставить изменение появляться через XML.

Вы на правильном пути, попробуйте изменить свою последнюю строку:

 minDateSelector.setCalendarViewShown(false);