2015-09-19 3 views
4

Как контролировать TimePicker, я просто хочу показать диапазон времени в тайм-таймере с 08:00 до 02:00 (кроме с 08:00 до 02:00, скрыть все)Предельный временной диапазон во время выборки

Я написал полный код, чтобы показать TimePicker и настроенное время.

Вот мой код:

  case DIALOG_TIME: 
      final Calendar c = Calendar.getInstance(); 
      int hour = c.get(Calendar.HOUR_OF_DAY); 
      int minute = c.get(Calendar.MINUTE); 

      // Create a new instance of TimePickerDialog and return it 
      return new TimePickerDialog(this, lisTime, hour, minute, 
      DateFormat.is24HourFormat(MainActivity.this)); 

     TimePickerDialog.OnTimeSetListener lisTime = new TimePickerDialog.OnTimeSetListener() { 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      // TODO Auto-generated method stub 
      String meridiem = ""; 
      nim = minute; 
      Calendar datetime = Calendar.getInstance(); 
      datetime.set(Calendar.HOUR_OF_DAY, hourOfDay); 
      datetime.set(Calendar.MINUTE, minute); 

      if (datetime.get(Calendar.AM_PM) == Calendar.AM) 
       meridiem = "AM"; 
      else if (datetime.get(Calendar.AM_PM) == Calendar.PM) 
       meridiem = "PM"; 

      hour = (datetime.get(Calendar.HOUR) == 0) ?"12":String.valueOf(datetime.get(Calendar.HOUR)); 

      String time = pad(Integer.parseInt(hour)) + ":" + pad(minute) + " " + meridiem; 
      editTime.setText(time); 

     } 
    }; 

    private String pad(int value){ 

     if(value<10){ 
      return "0"+value; 
     } 

     return ""+value; 
    } 
+0

@sasikumar я не знаю, как ограничить время в timepicker? все еще у меня нет контроля над этим ... показывая все 24 часа, и я просто хочу показать с 08:00 до 02:00 – Sun

+0

Насколько я понимаю, нет никакого способа ограничить диапазон времени «TimePicker» 'виджет. Вы должны создать свой собственный. – Squonk

+0

его простой справочник http://stackoverflow.com/questions/20214547/show-timepicker-with-minutes-intervals-in-android – sasikumar

ответ

1

Как и в этом ответе: https://stackoverflow.com/a/20396673/4130107 Вы можете создать свой собственный TimePickerDialog и перезаписать onAttachedToWindow(); но вместо того, чтобы ограничить диапазон час:

private final boolean mIs24HourView; 

public CustomTimePickerDialog(Context context, OnTimeSetListener callBack, 
           int hourOfDay, int minute, boolean is24HourView) { 
    super(context, callBack, hourOfDay, minute, is24HourView); 
    mIs24HourView = is24HourView; 
} 

@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    try { 
     Class<?> classForid = Class.forName("com.android.internal.R$id"); 
     Field timePickerField = classForid.getField("timePicker"); 
     this.timePicker = (TimePicker) findViewById(timePickerField 
       .getInt(null)); 
     Field field = classForid.getField("hour"); 


     final NumberPicker mHourSpinner = (NumberPicker) timePicker 
       .findViewById(field.getInt(null)); 

     if (mIs24HourView) { 
      mHourSpinner.setMinValue(2); 
      mHourSpinner.setMaxValue(20); 
     }else { 
      Field amPm = classForid.getField("amPm"); 

      mHourSpinner.setMinValue(2); 
      final NumberPicker amPm = (NumberPicker) timePicker 
        .findViewById(amPm.getInt(null)); 
      amPm.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 
       @Override 
       public void onValueChange(NumberPicker np1, int oldVal, int newVal) { 
        if (newVal == 0) { // case AM 
         mHourSpinner.setMinValue(2); 
         mHourSpinner.setMaxValue(12); 
        } else { // case PM 
         mHourSpinner.setMinValue(1); 
         mHourSpinner.setMaxValue(8); 
        } 
       } 
      }); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

EDIT: теперь работает на AM/PM слишком

enter image description here