Перемещение блока между минимальным значением и максимальным значением в NumberPicker

Я работаю над Android-приложением. Где-то внутри я показываю виджет NumberPicker.

Как отключить переход между минимальным значением и максимальным значением?

Что я имею в виду, я использую набор цифр с минимальным значением 0 и максимальным значением 9999. Это выглядит так:

number picker

Таким образом, пользователь может быстро бросить виджет, чтобы перейти от 0 до 9999. Я не хочу этого поведения. Виджет выбора числа, так как теперь он выглядит как замкнутый круг, и я пытаюсь понять, как я могу разбить круг точно между минимальным и максимальным значением, чтобы он выглядел так: от минимального значения и максимального значения:

number picker minimum valuenumber picker maximum value

Как я могу это достичь?

Что я пробовал:

  • Я искал везде в API NumberPicker, похоже, что это просто невозможно установить с помощью метода.
  • Я думаю, что я могу использовать метод setDisplayedValues(String[] displayedValues) для добавления пустых строк до минимального значения и после максимального значения, чтобы до минимального значения или после максимального значения не отображалось значение, НО пользователь все равно сможет пройти мимо них или WORSE: выберите пустое значение.

Любые идеи? Должен ли я загрязнять руки и копаться в реализации виджета? Возможно, внутри прослушивателя прикосновений?

Ответ 1

Вы должны вызвать setWrapSelectorWheel(false) на устройстве выбора номеров. Будьте осторожны, хотя вы делаете setMinimumValue(...) и setMaximumValue(...) перед вызовом setWrapSelectorWheel(false). Это просто не сработает, если вы поступите иначе.

Как и я, вы можете искать способ сделать это с помощью xml, но в то время не существует способа.

Ответ 2

Разве это setWrapSelectorWheel(false) (из API)?

Ответ 3

Как указано, setWrapSelectorWheel (false) делает трюк, поэтому один из предложенных ответов должен быть принят.

В общем, этот порядок вызовов работает:

picker.setMinValue(0);
picker.setMaxValue(stringValuesArray.length - 1);
picker.setDisplayedValues(stringValuesArray);
picker.setValue(defaultValue);
picker.setWrapSelectorWheel(false);