TimePicker Dialog from clicking EditText

前端 未结 9 1210
北海茫月
北海茫月 2020-11-30 20:16

I\'ve already got a DatePicker which pops up when the user clicks on the EditText field

eReminderDate.setOnClickListener(new OnClickListener() {

                    


        
9条回答
  •  我在风中等你
    2020-11-30 21:14

    I extended the nice reusable solution of @Sumoanand to support both focus change and click listeners when changing the time multiple times. Also updating the picker calendar to remember the last selected time + formatting HH:mm

    public class TimeSetter implements View.OnFocusChangeListener, TimePickerDialog.OnTimeSetListener, View.OnClickListener {
    
        private EditText mEditText;
        private Calendar mCalendar;
        private SimpleDateFormat mFormat;
    
        public TimeSetter(EditText editText){
           this.mEditText = editText;
           mEditText.setOnFocusChangeListener(this);
           mEditText.setOnClickListener(this);
        }
    
        @Override
        public void onFocusChange(View view, boolean hasFocus) {
            if (hasFocus){
                showPicker(view);
            }
        }
    
        @Override
        public void onClick(View view) {
            showPicker(view);
        }
    
        private void showPicker(View view) {
            if (mCalendar == null)
                mCalendar = Calendar.getInstance();
    
            int hour = mCalendar.get(Calendar.HOUR_OF_DAY);
            int minute = mCalendar.get(Calendar.MINUTE);
    
            new TimePickerDialog(view.getContext(), this, hour, minute, true).show();
        }
    
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
            mCalendar.set(Calendar.MINUTE, minute);
    
            if (mFormat == null)
                mFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());
    
            this.mEditText.setText(mFormat.format(mCalendar.getTime()));
        }
    
    }
    

    Usage from onCreate:

    EditText timeEditText = (EditText) rootView.findViewById(R.id.timeText);
    new TimeSetter(timeEditText);
    

提交回复
热议问题