ボクココ

個人開発に関するテックブログ

Android の NumberPicker を任意のSTEPでセットするときの対応

NumberPickerを使うたびに詰まってる気がするのでメモ。

NumberPickerで例えばminが500, max が 5000, step が500としたい場合、これがなかなかわかりにくい。メソッドを呼ぶだけで問題が起きないようにリファクタリングした。今後はNumberPickerを使い際はこのメソッドを使う。

    private void setNumberPicker(NumberPicker picker, int min, int max, int step, int format) {
        picker.setMinValue(min / step - 1);
        picker.setMaxValue((max / step) - 1);
        String[] valueSet = new String[max / min];
        for (int i = min; i <= max; i += step) {
            valueSet[(i / step) - 1] = getString(format, i);
        }
        picker.setDisplayedValues(valueSet);
    }

最後の引数 format は, 例えば strings.xml%d円とかしておいて、formatにR.id.format_yen みたいにして指定すると、NumberPickerの各値に反映できる。

ここで注意したいのが、これでpicker.getValue() を呼ぶと、0からの連番の数字になるので、+1してSTEPをかけあわせないといけないことに注意。