更改NumberPicker的步长

use*_*016 9 android android-widget

是否可以以比在OnScrollListener事件中处理它更方便的方式执行此操作?可惜它没有步长属性......

小智 28

Android中的NumberPicker有一个名为setDisplayedValues的方法.您可以使用此一个来显示自定义值(它需要一个字符串数组),然后在需要值时映射它们.因此,例如,如果您需要在分钟选择器中使用5步,则可以创建如下数组:

String[] minuteValues = new String[12];

for (int i = 0; i < minuteValues.length; i++) {
    String number = Integer.toString(i*5);
    minuteValues[i] = number.length() < 2 ? "0" + number : number;
}

minutePicker.setDisplayedValues(minuteValues);
Run Code Online (Sandbox Code Playgroud)

然后当你得到它的值时OnValueChangeListener,你只需要将它强制转换为整数:

Integer.parseInt(minuteValues[newVal]);
Run Code Online (Sandbox Code Playgroud)


eas*_*ese 12

例如,要设置步数"5",请使用NumberPicker.Formatter:

    NumberPicker.Formatter formatter = new NumberPicker.Formatter() {
        @Override
        public String format(int value) {
            int temp = value * 5;
            return "" + temp;
        }
    };
    numberPicker.setFormatter(formatter);
Run Code Online (Sandbox Code Playgroud)

  • @ckn然后直到滚动才显示初始数字!它通常不显示,但会调出键盘进行输入。有什么解决办法吗? (2认同)

ajp*_*olt 7

为什么不直接添加一个OnValueChangeListener:

numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {

     @Override
     public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
         picker.setValue((newVal < oldVal)?oldVal-5:oldVal+5);
     }

});
Run Code Online (Sandbox Code Playgroud)


Gui*_*hgo 5

Android中的NumberPicker有一个名为setDisplayedValues的方法.您可以使用此一个来显示自定义值(它需要一个字符串数组),然后在需要值时映射它们.

例如,您可以创建如下函数:

public String[] getArrayWithSteps (int iMinValue, int iMaxValue, int iStep)
{ 
   int iStepsArray = (iMaxValue-iMinValue) / iStep+1; //get the lenght array that will return

   String[] arrayValues= new String[iStepsArray]; //Create array with length of iStepsArray 

   for(int i = 0; i < iStepsArray; i++)
   {
     arrayValues[i] = String.valueOf(iMinValue + (i * iStep));
   }

   return arrayValues;
}
Run Code Online (Sandbox Code Playgroud)

因此,您应该调用方法> NumberPicker.setDisplayedValues,例如:

int min = 5;
int max = 180;
int step = 10;

String[] myValues = getArrayWithSteps(min, max, step); //get the values with steps... Normally 

//Setting the NumberPick (myNumberPick)
myNumberPick.setMinValue(0);
myNumberPick.setMaxValue((max-step) / min + 1); //Like iStepsArray in the function
//Because the Min and Max Value should be the range that will show. 
//For example, Min = 0 and Max = 2, so the NumberPick will display the first three strings in the array String (myValues); 
myNumberPick.setDisplayedValues(myValues);//put on NumberPicker 
Run Code Online (Sandbox Code Playgroud)

要获取NumberPick中的值:

String sValue = String.valueOf(10+(myNumberPick.getValue()*5)); //->> (iMinValue + (myNumberPick.getValue()*iStep))
Run Code Online (Sandbox Code Playgroud)