如何更改 Android TimePicker 分钟间隔?

Jea*_*and 4 android minute timepicker

我正在编写一个应用程序,用户需要在其中指定给定的时间点,但我似乎无法弄清楚如何设置用户可以选择的分钟值,只使用 5 的增量而不是 1 的增量.

简单地说,当用户滚动可用金额时,他/她只能看到 0、5、10、15 等。

先感谢您。

Qua*_*ddd 6

为确保您与 API 21+ 兼容,请确保您的 TimePicker 具有以下属性:

android:timePickerMode="spinner"
Run Code Online (Sandbox Code Playgroud)

然后这里是如何以编程方式设置间隔。如果找不到分钟字段,则此方法将使用标准 TimePicker:

private static final int INTERVAL = 5;
private static final DecimalFormat FORMATTER = new DecimalFormat("00");

private TimePicker picker; // set in onCreate
private NumberPicker minutePicker;

public void setMinutePicker() {
    int numValues = 60 / INTERVAL;
    String[] displayedValues = new String[numValues];
    for (int i = 0; i < numValues; i++) {
        displayedValues[i] = FORMATTER.format(i * INTERVAL);
    }

    View minute = picker.findViewById(Resources.getSystem().getIdentifier("minute", "id", "android"));
    if ((minute != null) && (minute instanceof NumberPicker)) {
        minutePicker = (NumberPicker) minute;
        minutePicker.setMinValue(0);
        minutePicker.setMaxValue(numValues - 1);
        minutePicker.setDisplayedValues(displayedValues);
    }
}

public int getMinute() {
    if (minutePicker != null) {
        return (minutePicker.getValue() * INTERVAL);
    } else {
        return picker.getCurrentMinute();
    }
}
Run Code Online (Sandbox Code Playgroud)


Lin*_*nga 0

您可以通过编程方式执行此操作。

pickStartTime = (TimePicker)findViewById(R.id.StartTime);
pickStartTime.setOnTimeChangedListener(mStartTimeChangedListener);
int nextMinute = 0;
Run Code Online (Sandbox Code Playgroud)

接下来,设置OnTimeChangedListener如下图所示

private TimePicker.OnTimeChangedListener mStartTimeChangedListener =
    new TimePicker.OnTimeChangedListener() {
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            updateDisplay(view, startDate, hourOfDay, minute);          
        }
    };

private TimePicker.OnTimeChangedListener mNullTimeChangedListener =
    new TimePicker.OnTimeChangedListener() {
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {}
    };
Run Code Online (Sandbox Code Playgroud)

和,

private void updateDisplay(TimePicker timePicker, Date date, int hourOfDay, int minute) 
{ 
    nextMinute = nextMinute+5;

    // remove ontimechangedlistener to prevent stackoverflow/infinite loop
    timePicker.setOnTimeChangedListener(mNullTimeChangedListener);

    // set minute
    timePicker.setCurrentMinute(nextMinute);

    // look up ontimechangedlistener again
    timePicker.setOnTimeChangedListener(mStartTimeChangedListener);

    // update the date variable for use elsewhere in code
    date.setMinutes(nextMinute);  
}
Run Code Online (Sandbox Code Playgroud)

  • 它确实有效,因为用户只能选择 5 的增量,但显示结果顶部和底部的选项不是 5 的增量,你知道我如何将微调器中可用的金额绑定到只能增量5? (2认同)