Friday, February 8, 2013

Disable writing inside a TimePickerDialog using keyboard


In previous post am talking about how create TimePickerDialog with 15 minute interval
but when user click on Editbox of numberpicker, android soft keyboard lunch,
is there any way to disable writing inside a timepicker using keyboard? yes used this line
myDatePicker.setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);

how and where in dialog
just create a customize TimePickerDialog class as previous post mentions
see below sample code
public class TimePickerDialogs extends TimePickerDialog{

 private TimePicker mTimePicker;
 private OnTimeSetListener mCallback;
 
 public TimePickerDialogs(Context arg0, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {
        super(arg0, callBack, hourOfDay, minute, is24HourView);
        // TODO Auto-generated constructor stub
        this.mCallback = callBack;
        mTimePicker = new TimePicker(arg0);
        mTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
        mTimePicker.setIs24HourView(is24HourView);
        mTimePicker.setCurrentHour(hourOfDay);
        mTimePicker.setCurrentMinute(minute);
        mTimePicker.setOnTimeChangedListener(this);
        setView(mTimePicker);
 }

 @Override
 public void onClick(DialogInterface dialog, int which) {
     // TODO Auto-generated method stub
     tryNotifyTimeSet();
 }
 
 private void tryNotifyTimeSet() {
        if (mCallback != null) {
            mTimePicker.clearFocus();
            mCallback.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute());
        }
    }
 
 @Override
 public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
     // TODO Auto-generated method stub
     //super.onTimeChanged(arg0, arg1, arg2);
     if (mIgnoreEvent)
                return;
        if (minute%TIME_PICKER_INTERVAL!=0){
            int minuteFloor=minute-(minute%TIME_PICKER_INTERVAL);
            minute=minuteFloor + (minute==minuteFloor+1 ? TIME_PICKER_INTERVAL : 0);
            if (minute==60)
                minute=0;
            mIgnoreEvent=true;
            view.setCurrentMinute(minute);
            mIgnoreEvent=false;
        }
 }

 private final int TIME_PICKER_INTERVAL=15;
 private boolean mIgnoreEvent=false;
 
}

1 comment:

  1. Thanks for the post. However, I can still able to open edit text.

    ReplyDelete