1

他の誰かを助けることを期待してこれを投稿しています。しかし、同じことをもっと簡単に行う方法があれば、誰かが自分の手順を共有してくれることを願っています. メソッド 'setDisplayedValues' を使用して NumberPicker に表示する値の配列を渡すと、基になるメソッドが Number Layout の代わりに Text Keyboard Layout の使用を強制しますが、これは私が望むものではありません。NumberPicker の InputType を設定する方法を見つけました。これは私の拡張クラスで行われます:

class public class NumberPickerDialogFragment は DialogFragment を拡張します:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // We are getting the parameters passed in to figure out the range of the Number Picker
    NumPickerValues = getArguments().getStringArray("NumPickerRange");
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View dlgNumPicker = inflater.inflate(R.layout.dialog_num_picker, null);
    NumberPicker np = (NumberPicker) dlgNumPicker.findViewById(R.id.npNumberPicker);
    // Always remember that NumberPicker methods need an index position, rather than the value in that array position
    np.setMinValue(0);
    np.setMaxValue(NumPickerValues.length-1);
    np.setDisplayedValues(NumPickerValues);
    np.setValue(getArguments().getInt("InitialValue"));
    np.setWrapSelectorWheel(false);
    np.setOnValueChangedListener(this);
    // Since the underlying code for the NumberPicker sets the keyboard layout for text, due to the use of 'setDisplayedValues',
    // we need to set it back to a number keyboard layout
    ((EditText)np.getChildAt(0)).setRawInputType(InputType.TYPE_CLASS_NUMBER);
    // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the dialog layout
    return builder.setView(dlgNumPicker)
            .setTitle(getArguments().getInt("NumPickerTitle"))
            .setPositiveButton(getArguments().getInt("SaveButtonTitle"), new ButtonCLickListener())
            .setNegativeButton(R.string.cancel, new ButtonCLickListener())
            .create();
}

上記のコードのセクションで、InputType を設定する行は ((EditText)np.getChildAt(0)).setRawInputType(InputType.TYPE_CLASS_NUMBER); です。

これを行うウェブ上で何も見つかりませんでした。それを行うのはきれいな方法のようです。ただし、この方法でパフォーマンスの問題があるかどうかはわかりません。ある場合はお知らせください。

4

0 に答える 0