在NumberPicker中阻止最小值和最大值之间的转换

我正在开发一个Android应用程序。 在某处,我正在显示NumberPicker小部件。

如何禁用最小值和最大值之间的转换?

我的意思是,我使用的是数字选择器,最小值为0,最大值为9999.看起来像这样,

号码选择器

通过这种方式,用户可以快速将小部件从0跳转到9999.我不希望出现这种情况。 数字选择器小部件现在看起来像一个封闭的圆圈,我试图看看如何在最小值和最大值之间精确地打破圆圈,以便它从最小值和最大值看起来像这样:

号码选择器最小值数字选择器最大值

我怎样才能做到这一点?

我试过的:

  • 我在NumberPicker API中搜索到的所有地方,似乎这不是人们可以使用方法设置的东西。
  • 我认为我可以使用方法setDisplayedValues(String[] displayedValues)方法在最小值之前和最大值之后添加空字符串,这样在最小值之前或之后没有值显示最大值, 但是用户将仍然可以扔过他们或WORSE:选择空值。

有任何想法吗? 我是否必须弄脏手,并深入了解小部件实现? 触摸听众里面可能吗?

您必须在数字选择器上调用setWrapSelectorWheel(false) 。 但是在调用setWrapSelectorWheel(false) 之前 ,请注意setMinimumValue(...)setMaximumValue(...) setWrapSelectorWheel(false) 。 如果你不这样做,它就行不通。

像我一样,你可能正在寻找一种通过xml来实现这一目标的方法,但当时没办法。

是不是这个setWrapSelectorWheel(false) ( 来自API )?

正如所指出的那样,setWrapSelectorWheel(false)可以解决问题,因此应该接受其中一个提供的答案。

通常,此调用顺序有效:

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