Изменить направление прокрутки диалогового окна выбора номера Android

Я использую средство выбора номера в диалоговом окне и хочу изменить направление прокрутки с Вверх на Вниз. Это означает, что в настоящее время по умолчанию, если я прокручиваю вверх, числа приходят снизу, но я хочу, чтобы они приходили сверху вниз, а прокрутка была бы вниз, а не вверх. Вот мой Dialog Code для выбора номера.

private static void getMeasure(int textMsg, final BoardRect item,
            final int defaultValue, final int maxValue,
            final OnUIMeasureReadListener listener) {
        final NumberPicker picker = new NumberPicker(
                AppContext.getActivityContext());
        picker.setMinValue(-1);
        picker.setMaxValue(maxValue);
        picker.setWrapSelectorWheel(false);
        picker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);

        // create actual dialog
        final AlertDialog.Builder msgbox = new AlertDialog.Builder(
                AppContext.getActivityContext());

        msgbox.setCancelable(true);
        msgbox.setTitle(AppContext.getActivityContext().getResources()
                .getString(R.string.rect_dimen));
        msgbox.setMessage(textMsg);
        msgbox.setView(picker);

        msgbox.setPositiveButton(AppContext.getActivityContext().getResources()
                .getString(R.string.dlg_positive_btn),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        try {
                            listener.measureRead(picker.getValue());
                        } catch (Exception ex) {
                        }
                    }
                });     
        AlertDialog dialog = msgbox.create();
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();

        wmlp.gravity = Gravity.BOTTOM | Gravity.RIGHT;
        wmlp.x = 135; // x position
        wmlp.y = 0; // y position
        dialog.getWindow().setAttributes(wmlp);
        dialog.show();
        dialog.getWindow().setLayout(350, 650);
    }

1 ответ

Решение

У меня просто была такая же проблема. Я использовал setDisplayedValues() метод NumberPicker класс для явного задания значений для отображения. Вы можете сгенерировать массив строк, которые представляют строковые значения нужных вам чисел:

public String[] getDisplayValues(int minimumInclusive, int maximumInclusive) {

    ArrayList<String> result = new ArrayList<String>();

    for(int i = maximumInclusive; i >= minimumInclusive; i--) {
        result.add(Integer.toString(i));
    }

    return result.toArray(new String[0]);
}

Сохранить этот массив в поле _displayValues и тогда вы можете позвонить:

picker.setDisplayValues(_displayValues);
//we want the max value to be the index of our last value
picker.setMaxValue(_displayValues.length - 1);

Когда OnValueChangeListener событие поднято, используйте newVal как индекс в ваш массив:

var realValue = Integer.parseInt(_displayValues[newVal]);

Надеюсь, это поможет.

Другие вопросы по тегам