5

NumberPickerの増減間隔を他の値に設定することはできますか? たとえば、50 (50、100、150、200、250 など)? それとも、カスタマイズ/ハックが必要ですか?

4

4 に答える 4

7

私はあなたがこれを行うことができると思います:

  • ピッカーの表示された配列値を初期化します。

    int NUMBER_OF_VALUES = 10; //num of values in the picker
    int PICKER_RANGE = 50;
    ...
    String[] displayedValues  = new String[NUMBER_OF_VALUES];
    //Populate the array
    for(int i=0; i<NUMBER_OF_VALUES; i++)
        displayedValues[i] = String.valueOf(PICKER_RANGE * (i+1));
    /* OR: if the array is easy to be hard-coded, then just hard-code it:
       String[] displayedValues = {"50", "100", "150", .....}; */
    
  • 表示された配列をピッカーに設定します。

    /* 
    NOTE: Your picker range has to be [0, displayedValues.size()-1] to be 
          consistent with the array index (displayedValues index).
    */
    //ToDo: Initialize the picker first.
    numPicker.setMinValue(0); 
    numPicker.setMaxValue(displayedValues.size()-1);
    numPicker.setDisplayedValues(displayedValues);
    
  • ピッカーの値を取得/設定する場合:

    //To get the current value in the picker
    choosenValue = displayedValues[numPicker.getValue()]; 
    //To set a new value (let's say 150)
    for( int i=0; i<displayedValues.length ; i++ )
        if( displayedValues[i].equals("150") )
             numPicker.setValue(i);
    

最後に、 android-wheelと呼ばれる、カスタマイズが容易な優れたウィジェットがあります。よろしければご覧いただき、ご利用ください。

于 2012-08-12T23:07:22.810 に答える
0

@ iturki の値を設定する最後のポイント。valueInNumberPicker X PICKER_RANGE = valueInDisplayedValueArray したがって、次の方法で for ループを回避できます。

// PICKER_RANGE= 50 so 150/50 -1 = 2, numPicker.setValue(2) == 150
numPicker.setValue(150/PICKER_RANGE -1); 

私の2セント。

ちなみに、iturkiによる素晴らしい回答です。

于 2013-05-28T10:35:56.780 に答える
0

その日の少し遅いですが、これは私にとってはうまくいきます...

    numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker numberPicker, int oldVal, int newVal) {
            if (newVal > oldVal) {
                numberPicker.setValue(newVal+(myInterval-1));
            } else if (newVal < oldVal)
                numberPicker.setValue(newVal-(myInterval-1));
        }
    });
于 2020-11-05T04:50:30.533 に答える