如何在TimePicker Android中以30分钟的间隔设置开始时间和结束时间?

如何在TimePicker Android中以30分钟的间隔设置开始时间和结束时间?,android,Android,我正在安卓系统中开发DatePicker和TimePicker。我正在从服务器获取开始时间和时间。我可以使用 我想在timepicker中设置最小时间(07:00)和最大时间(10:00),并保持30分钟的间隔。我试着用 我需要的是设置timepicket,最小值为07:00,最大值为10:00,间隔为 07:00、07:30、08:00等 这是相同的代码` public void onCreate(Bundle savedInstanceState) { super.onCreat

我正在安卓系统中开发DatePicker和TimePicker。我正在从服务器获取开始时间和时间。我可以使用

我想在timepicker中设置最小时间(07:00)和最大时间(10:00),并保持30分钟的间隔。我试着用

我需要的是设置timepicket,最小值为07:00,最大值为10:00,间隔为 07:00、07:30、08:00等

这是相同的代码`

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TimePicker pn = (TimePicker) findViewById(R.id.tp_powernap);

    pn.setCurrentHour(7);
    pn.setCurrentMinute(0);
    System.out.println("timepicker erstellt");
    pn.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
    System.out.println("Tastatur geblockt");
    pn.setOnTimeChangedListener(StartTimeChangedListener);
    System.out.println("starttimechangedlistener");
    pn.setIs24HourView(false);
}


private TimePicker.OnTimeChangedListener StartTimeChangedListener =
    new TimePicker.OnTimeChangedListener() {

    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
        updateDisplay(view, hourOfDay, minute);          
    }
};

private TimePicker.OnTimeChangedListener NullTimeChangedListener =
    new TimePicker.OnTimeChangedListener() {

    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

    }
};



private void updateDisplay(TimePicker timePicker, int hourOfDay, int minute) {
    int nextMinute = 0;
    timePicker.setOnTimeChangedListener(NullTimeChangedListener);
    if (minute >= 45 && minute <= 59) 
        nextMinute = 45;  
    else if (minute  >= 30) 
        nextMinute = 30;
    else if (minute >= 15) 
        nextMinute = 15;
    else if (minute > 0) 
        nextMinute = 0; 
    else { 
        nextMinute = 45; 
    }

    if (minute - nextMinute == 1) {
        if (minute >= 45 && minute <= 59) 
            nextMinute = 00; 
        else if(minute  >= 30) 
            nextMinute = 45;
        else if(minute >= 15) 
            nextMinute = 30;
        else if(minute > 0) 
            nextMinute = 15; 
        else { 
            nextMinute = 15; 
        }
    }

    timePicker.setCurrentMinute(nextMinute);

    timePicker.setOnTimeChangedListener(StartTimeChangedListener);

}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
计时器选择器pn=(计时器选择器)findViewById(R.id.tp\u powernap);
pn.设置当前小时数(7);
pn.setCurrentMinute(0);
System.out.println(“时间选择器erstellt”);
pn.setDescendantFocusability(时间选择器、焦点块、子体);
System.out.println(“Tastatur geblockt”);
请注意:setOnTimeChangedListener(StartTimeChangedListener);
System.out.println(“starttimechangedlistener”);
请注意,设置为24小时视图(假);
}
private TimePicker.OnTimeChangedListener StartTimeMechanagedListener=
新的时间选择器。OnTimeChangedListener(){
公共void onTimeChanged(时间选择器视图,整数小时日,整数分钟){
更新显示(视图、小时、天、分钟);
}
};
private TimePicker.OnTimeChangedListener NullTimeChangedListener=
新的时间选择器。OnTimeChangedListener(){
公共void onTimeChanged(时间选择器视图,整数小时日,整数分钟){
}
};
私有void updateDisplay(计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器计时器{
int nextMinute=0;
timePicker.setOnTimeChangedListener(NullTimeChangedListener);
如果(分钟>=45&&minute=30)
下一分钟=30;
否则,如果(分钟>=15)
下一分钟=15;
否则,如果(分钟>0)
下一分钟=0;
否则{
下一分钟=45;
}
如果(分钟-下一分钟==1){
如果(分钟>=45&&minute=30)
下一分钟=45;
否则,如果(分钟>=15)
下一分钟=30;
否则,如果(分钟>0)
下一分钟=15;
否则{
下一分钟=15;
}
}
timePicker.setCurrentMinute(下一分钟);
timePicker.setOnTimeChangedListener(StartTimeMechanagedListener);
}
仅供参考(这是一个老问题)。可以使用以下方法实现间隔:

Class<?> classForid = Class.forName("com.android.internal.R$id");
Field field = classForid.getField("minute");

NumberPicker mMinuteSpinner = (NumberPicker) timePicker
                    .findViewById(field.getInt(null));
mMinuteSpinner.setMinValue(0);
mMinuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1);
List<String> displayedValues = new ArrayList<String>();
for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
    displayedValues.add(String.format("%02d", i));
}
mMinuteSpinner.setDisplayedValues(displayedValues
                    .toArray(new String[0]));
Class classForid=Class.forName(“com.android.internal.R$id”);
Field=classForid.getField(“分钟”);
NumberPicker mMinuteSpinner=(NumberPicker)计时器选择器
.findviewbyd(field.getInt(null));
mMinuteSpinner.setMinValue(0);
mMinuteSpinner.setMaxValue((60次/选择器间隔)-1);
List displayedValues=new ArrayList();
对于(int i=0;i<60;i+=时间\u选择器\u间隔){
displayedValues.add(String.format(“%02d”,i));
}
mMinuteSpinner.setDisplayedValues(displayedValues
.toArray(新字符串[0]);
另见

可以以类似的方式设置开始时间和结束时间,但AM/PM标志存在问题。如果您不使用am/pm,而是始终以24小时格式显示时间,则问题已解决;-)

if(开始时间!=-1&&endHour!=-1){
Field=classForid.getField(“小时”);
NumberPicker hourSpinner=(NumberPicker)计时器选择器
.findviewbyd(field.getInt(null));
hourSpinner.setMinValue(startHour);
hourSpinner.setMaxValue(endHour);
List displayedValues=new ArrayList();
if(timePicker.is24HourView()){
对于(int i=startHour;i
        if (startHour != -1 && endHour != -1) {
            Field field = classForid.getField("hour");
            NumberPicker hourSpinner = (NumberPicker) timePicker
                    .findViewById(field.getInt(null));
            hourSpinner.setMinValue(startHour);
            hourSpinner.setMaxValue(endHour);
            List<String> displayedValues = new ArrayList<String>();
            if (timePicker.is24HourView()) {
                for (int i = startHour; i <= endHour; ++i) {
                    displayedValues.add(String.format("%02d", i));
                }
            } else {
                for (int i = startHour; i <= 12; ++i) {
                    displayedValues.add(String.format("%d", i));
                }
                for (int i = 1; i <= endHour % 12; ++i) {
                    displayedValues.add(String.format("%d", i));
                }
            }
            hourSpinner.setDisplayedValues(displayedValues
                    .toArray(new String[0]));
        }