2011-12-24 5 views
3

Я работаю над DatePicker и TimePicker в android. Я получаю время начала и время от сервера. Я могу установить максимальную дату и минуту с программным путем, используя this linkКак установить время начала и время окончания с интервалом в 30 минут в TimePicker Android?

Я хочу установить минимальное время (07:00) и максимальное время (10:00) в timepicker и поддерживать интервал в 30 минут. Я попытался с помощью This Link

Что мне нужно, чтобы установить 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); 

} 

ответ

0

Только для справки (это старый вопрос). Интервал может быть реализован с помощью следующей хак:

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])); 

смотри также here

Пуск- и Конечное время могут быть установлены подобным образом, но есть проблемы с AM/PM Флага. Если вы не используете am/pm, а вместо этого всегда показываете время в 24-часовом формате, ваша проблема решена ;-)

 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])); 
     } 
Смежные вопросы