Android 数字选择器 setMin/Max

Android NumberPicker setMin/Max

我尝试在 NumberPicker 上设置 min/max。我有以下值:

One, Two, Three, Four

我设置

picker.setMinValue(0);
picker.setMaxValue(1);

选择器将显示

One, Two

然而当我设置

picker.setMinValue(1);
picker.setMaxValue(1);

它显​​示 One 但我预计 Two。我很迷惑。为什么显示的是一?

picker.setMaxValue(2) 应该给两个,如果最大值是 1 你怎么能期望 2

it displays One but I expect Two. I am confused. Why is One displayed instead?

因为NumberPicker和你想的有点不一样。

在数字选择器中,您使用如下代码设置值:

numberPicker.setMinValue(7);
numberPicker.setMaxValue(10);

您的 NumberPicker 将有数字 7、8、9、10。 然后使用 setDisplayedValues:

numberPicker.setDisplayedValues(new String[]{"One", "Two", "Three", "Four"});

NumberPicker 有字符串 "One"、"Two"、"Three"、"Four"。

现在更改最小值:

numberPicker.setMinValue(10);
numberPicker.setMaxValue(10);

NumberPicker 有字符串 "One"。

这是为什么?

因为实际值和显示值之间没有相关性。正如您在 NumberPickersource code 中所见,显示的文本是这样计算的:

String text = (mDisplayedValues == null) ? formatNumber(mValue) : mDisplayedValues[mValue - mMinValue];

因此,如果您的最小值为 10 而所选值为 10,则显示的文本是数组的第一个元素。

回到你的例子,如果你想在将最小值和最大值设置为 1 时显示字符串 "Two",你需要相应地更改数组:

numberPicker.setDisplayedValues(new String[]{"Two"});
picker.setMinValue(1);
picker.setMaxValue(1);