Блокировать переход между минимальным значением и максимальным значением в NumberPicker

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

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

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

выбор номера

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

минимальное значение выбора номера максимальное значение выбора номера

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

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

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

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


person Leeeeeeelo    schedule 28.03.2013    source источник


Ответы (3)


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

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

person doplumi    schedule 11.01.2014

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

person sgdesmet    schedule 25.06.2013
comment
Что с этим не так? Если вы установите его на false, вы не сможете перейти от минимального значения к максимальному или наоборот. - person sgdesmet; 26.06.2013
comment
Это решение, просто убедитесь, что метод setWrapSelectorWheel(false) вызывается ПОСЛЕ инициализации значений средства выбора. - person SergioM; 20.08.2014

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

В целом работает такой порядок звонков:

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