Ответ 1
Если вы ориентируетесь на более позднюю версию API, вы можете использовать следующий XML (нет необходимости писать код Java) в <DatePicker>
:
android:calendarViewShown="false"
На моем экране настроек у меня есть виджет выбора даты. В дизайнере в 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 здесь говорит, что он должен существовать. Любые идеи?!
Если вы ориентируетесь на более позднюю версию 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);