読者です 読者をやめる 読者になる 読者になる

ボクココ

サービス開発を成功させるまでの歩み

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

Android

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をかけあわせないといけないことに注意。