Подтвердить что ты не робот

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

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

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

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

Но опять же, этот сбой - setCalendarViewShown не найден. Но docs здесь говорит, что он должен существовать. Любые идеи?!

4b9b3361

Ответ 1

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

 android:calendarViewShown="false"

Ответ 2

Метод в 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
}

Ответ 3

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

import android.os.Build;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void someThing() {
    [...]

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        minDateSelector.setCalendarViewShown(false);
    }
}

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

Ответ 4

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

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

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

android:calendarViewShown="false"

Ответ 5

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

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

minDateSelector.setCalendarViewShown(false);