Ограничить диапазон времени в окне выбора времени

Как управлять TimePicker, я просто хочу показать диапазон времени в окне выбора времени с 08:00 до 14:00 (кроме 08:00 до 14: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;
    }

person Sun    schedule 19.09.2015    source источник
comment
@sasikumar я не знаю, как ограничить время в таймпикере? до сих пор я не могу это контролировать... показаны все 24 часа, и я просто хочу показать с 08:00 до 14:00   -  person Sun    schedule 19.09.2015
comment
Насколько я понимаю, нет возможности ограничить временной диапазон виджета TimePicker. Вы должны были бы создать свой собственный.   -  person Squonk    schedule 19.09.2015
comment
его простая ссылка stackoverflow.com/ вопросы/20214547/   -  person sasikumar    schedule 19.09.2015
comment
@sasikumar Я знаю о минутных интервалах, но понятия не имею об ограничении диапазона времени ....   -  person Sun    schedule 19.09.2015
comment
@Squonk, ты можешь показать мне дорогу?   -  person Sun    schedule 19.09.2015
comment
@Sun: я не понимаю, как работает TimePicker, поэтому не знаю, с чего начать. Вы можете просто использовать два виджета Spinner рядом друг с другом и установить содержимое левого из 08 -> 14 и правого из 0 -> 59.   -  person Squonk    schedule 19.09.2015
comment
Вам нужно настроить средство выбора времени... взгляните на этот stackoverflow.com/questions/13516389/   -  person WISHY    schedule 09.10.2015
comment
@WISHY я уже не добился успеха   -  person Sun    schedule 09.10.2015
comment
Это может помочь.... stackoverflow.com/questions/ 13516389/   -  person Burhanuddin Rashid    schedule 09.10.2015


Ответы (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();
    }

}

РЕДАКТИРОВАТЬ: теперь работает и для AM/PM

введите здесь описание изображения

person Tobi    schedule 09.10.2015