Изменить направление прокрутки диалогового окна выбора номера 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]);
Надеюсь, это поможет.