Я хочу показать всплывающее окно datepicker. Я нашел несколько примеров, но я не получаю их должным образом. У меня есть один edittext, и я хочу, чтобы при нажатии на edittext диалоговое окно datepicker должно появляться и после установки даты, дата должна отображаться в edittext в формате dd/mm/yyyy. PLease предоставит мне пример кода или хорошие ссылки.
Datepicker: как всплывать datepicker при нажатии на edittext
Ответ 1
Попробуйте это в XML файле:
<EditText
   android:id="@+id/Birthday"
   custom:font="@string/font_avenir_book"
   android:clickable="true"
   android:editable="false"
   android:hint="@string/birthday"/>
Теперь в файле Java:
final Calendar myCalendar = Calendar.getInstance();
EditText edittext= (EditText) findViewById(R.id.Birthday);
DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, monthOfYear);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        updateLabel();
    }
};
edittext.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        new DatePickerDialog(classname.this, date, myCalendar
                .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH)).show();
    }
});
Теперь добавьте метод в вышеуказанную активность.
private void updateLabel() {
    String myFormat = "MM/dd/yy"; //In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    edittext.setText(sdf.format(myCalendar.getTime()));
}
 Добавьте android:focusable="false" в xml файле EditText, чтобы разрешить одно касание.
Ответ 2
Не удалось заставить кого-нибудь из них работать, поэтому добавит мой, только в случае, если это поможет.
public class MyEditTextDatePicker  implements OnClickListener, OnDateSetListener {   
EditText _editText;
private int _day;
private int _month;
private int _birthYear;
private Context _context;
public MyEditTextDatePicker(Context context, int editTextViewID)
{       
    Activity act = (Activity)context;
    this._editText = (EditText)act.findViewById(editTextViewID);
    this._editText.setOnClickListener(this);
    this._context = context;
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    _birthYear = year;
    _month = monthOfYear;
    _day = dayOfMonth;
    updateDisplay();
}
@Override
public void onClick(View v) {
    Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
    DatePickerDialog dialog = new DatePickerDialog(_context, this,
            calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH));
    dialog.show();
}
// updates the date in the birth date EditText
private void updateDisplay() {
    _editText.setText(new StringBuilder()
    // Month is 0 based so add 1
    .append(_day).append("/").append(_month + 1).append("/").append(_birthYear).append(" "));
}
}
Также то, что не упоминается в других. Убедитесь, что вы поместили следующее в EditText xml.
android:focusable="false"
В противном случае, как и в моем случае, клавиатура будет продолжать появляться. Надеюсь, что это поможет кому-то.
Ответ 3
class MyClass implements OnClickListener, OnDateSetListener {   
   EditText editText;
   this.editText = (EditText) findViewById(R.id.editText);
   this.editText.setOnClickListener(this);
   @Override
   public void onClick(View v) {
       DatePickerDialog dialog = new DatePickerDialog(this, this, 2013, 2, 18);
       dialog.show();
   }
   @Override
   public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
       // this.editText.setText();
   }
}
Ответ 4
Существует и другой способ повторного использования:
Создать класс:
class setDate implements OnFocusChangeListener, OnDateSetListener {   
       private EditText editText;
       private Calendar myCalendar;
       public setDate(EditText editText, Context ctx){
           this.editText = editText;
           this.editText.setOnFocusChangeListener(this);
           myCalendar = Calendar.getInstance();
       }
       @Override
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)     {
           // this.editText.setText();
            String myFormat = "MMM dd, yyyy"; //In which you need put here
            SimpleDateFormat sdformat = new SimpleDateFormat(myFormat, Locale.US);
            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            editText.setText(sdformat.format(myCalendar.getTime()));
       }
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            if(hasFocus){
             new DatePickerDialog(ctx, this, myCalendar
                       .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                       myCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        }
    }
Затем вызовите этот класс в функции onCreate:
    EditText editTextFromDate = (EditText) findViewById(R.id.editTextFromDate);
    setDate fromDate = new setDate(editTextFromDate, this);
Ответ 5
Вот как я это делаю: похоже на выбранный ответ, но используя статический класс диалога, чтобы его можно было многократно использовать, а также использовать onFocusChange вместо onClick.
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                DialogFragment datePickerFragment = new DatePickerFragment() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int day) {
                        Log.d(TAG, "onDateSet");
                        Calendar c = Calendar.getInstance();
                        c.set(year, month, day);
                        editText.setText(df.format(c.getTime()));
                        nextField.requestFocus(); //moves the focus to something else after dialog is closed
                    }
                };
                datePickerFragment.show(getActivity().getSupportFragmentManager(), "datePicker");
            }
        }
    });
И диалоговое окно datepicker.
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }
    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        //blah
    }
}
Ответ 6
Выбранный ответ не совсем сработал у меня, поскольку я должен был нажать поле EditText один раз, а затем снова коснуться его, прежде чем OnClickListener будет стрелять. Я смог исправить это, заменив OnClickListener на OnTouchListener, на всякий случай кто-то столкнулся с подобной проблемой, вот как выглядит мой код:
Calendar myCalendar = Calendar.getInstance();
DatePickerDialog.OnDateSetListener date = new 
DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, monthOfYear);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        updateLabel();
    }
};
edittext.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public void onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            new DatePickerDialog(classname.this, date, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH)).show();
        }
    }
});
private void updateLabel() {
    String myFormat = "MM/dd/yy"; //In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    edittext.setText(sdf.format(myCalendar.getTime()));
}
Ответ 7
# 1. Я хочу показать datepicker с текущей датой как предварительно выбранный (я использую butterknife для инъекций)
  @OnClick(R.id.your_view) public void onClickYourView() {
    final Calendar myCalendar = Calendar.getInstance();
    DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
      @Override
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        // TODO Auto-generated method stub
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, monthOfYear);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        String myFormat = "dd MMMM yyyy"; // your format
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());
        your_view.setText(sdf.format(myCalendar.getTime()));
      }
    };
    new DatePickerDialog(mContext, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
  }
2. Если вы хотите предварительно выбрать дату, замените последнюю часть на
new DatePickerDialog(mContext, date, 1990, 0, 1).show();
то вы можете получить его с помощью переменной myCalendar или непосредственно с текстом на вашем представлении.
Ответ 8
<EditText
    android:id="@+id/date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="DD/MM/YYYY"
    android:inputType="date"
    android:focusable="false"/>
<EditText
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="00:00"
    android:inputType="time"
    android:focusable="false"/>
ФАЙЛ JAVA
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    EditText selectDate,selectTime;
    private int mYear, mMonth, mDay, mHour, mMinute;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        selectDate=(EditText)findViewById(R.id.date);
        selectTime=(EditText)findViewById(R.id.time);
        selectDate.setOnClickListener(this);
        selectTime.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        if (view == selectDate) {
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);
            DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            selectDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
                        }
                    }, mYear, mMonth, mDay);
            datePickerDialog.show();
        }
        if (view == selectTime) {
            // Get Current Time
            final Calendar c = Calendar.getInstance();
            mHour = c.get(Calendar.HOUR_OF_DAY);
            mMinute = c.get(Calendar.MINUTE);
            // Launch Time Picker Dialog
            TimePickerDialog timePickerDialog = new TimePickerDialog(this,
                    new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay,
                                              int minute) {
                            selectTime.setText(hourOfDay + ":" + minute);
                        }
                    }, mHour, mMinute, false);
            timePickerDialog.show();
        }
    }
}
Ответ 9
Раствор с использованием фрагментов, MvvmCross и Xamarin.Android
public class EnterTimeView : MvxFragment, DatePickerDialog.IOnDateSetListener
    {            
        private EditText datePickerText;
        public EnterTimeView()
        {
            this.RetainInstance = true;
        }
        public override Android.Views.View OnCreateView(Android.Views.LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState)
        {
            this.HasOptionsMenu = true;
            var ignored = base.OnCreateView(inflater, container, savedInstanceState);
            var view = inflater.Inflate(Resource.Layout.EnterTimeView, container, false);
            datePickerText = view.FindViewById<EditText>(Resource.Id.DatePickerEditText);
            datePickerText.Focusable = false;
            datePickerText.Click += delegate
            {
                var dialog = new DatePickerDialogFragment(Activity, Convert.ToDateTime(datePickerText.Text), this);
                dialog.Show(FragmentManager, "date");
            };
            var set = this.CreateBindingSet<EnterTimeView, EnterTimeViewModel>();    
            set.Bind(datePickerText).To(vm => vm.Date);
            set.Apply();
            return view;
        }   
        public void OnDateSet(Android.Widget.DatePicker view, int year, int monthOfYear, int dayOfMonth)
        {
            datePickerText.Text = new DateTime(year, monthOfYear + 1, dayOfMonth).ToString();
        }
        private class DatePickerDialogFragment : Android.Support.V4.App.DialogFragment 
        {
            private readonly Context _context;
            private DateTime _date;
            private readonly DatePickerDialog.IOnDateSetListener _listener;
            public DatePickerDialogFragment(Context context, DateTime date, DatePickerDialog.IOnDateSetListener listener)
            {
                _context = context;
                _date = date;
                _listener = listener;
            }
            public override Dialog OnCreateDialog(Bundle savedState)
            {
                var dialog = new DatePickerDialog(_context, _listener, _date.Year, _date.Month - 1, _date.Day);
                return dialog;
            }
        }
Ответ 10
 selectDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatePickerDialog  mdiDialog =new DatePickerDialog(mContext,new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        Toast.makeText(getApplicationContext(),year+ " "+monthOfYear+" "+dayOfMonth,Toast.LENGTH_LONG).show();
                    }
                }, year, month, date);
                mdiDialog.show();
            }
        });
Ответ 11
Использование DataBinding:
<EditText
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:focusable="false"
  android:onClick="@{() -> viewModel.onDateEditTextClicked()}"
  android:hint="@string/hint_date"
  android:imeOptions="actionDone"
  android:inputType="none"
  android:maxLines="1"
  android:text="@={viewModel.filterDate}" />
 (см focusable, inputType и onClick)
Внутри ViewModel:
public void onDateEditTextClicked() {
    // do something
}
Ответ 12
Мой класс для show DatePicker. Я могу использовать для EditText, TextView или Button
import android.app.DatePickerDialog;
import android.content.Context;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class TextViewDatePicker
        implements View.OnClickListener, DatePickerDialog.OnDateSetListener {
    public static final String DATE_SERVER_PATTERN = "yyyy-MM-dd";
    private DatePickerDialog mDatePickerDialog;
    private TextView mView;
    private Context mContext;
    private long mMinDate;
    private long mMaxDate;
    public TextViewDatePicker(Context context, TextView view) {
        this(context, view, 0, 0);
    }
    public TextViewDatePicker(Context context, TextView view, long minDate, long maxDate) {
        mView = view;
        mView.setOnClickListener(this);
        mView.setFocusable(false);
        mContext = context;
        mMinDate = minDate;
        mMaxDate = maxDate;
    }
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, monthOfYear);
        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        Date date = calendar.getTime();
        SimpleDateFormat formatter = new SimpleDateFormat(DATE_SERVER_PATTERN);
        mView.setText(formatter.format(date));
    }
    @Override
    public void onClick(View v) {
        Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
        mDatePickerDialog = new DatePickerDialog(mContext, this, calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
        if (mMinDate != 0) {
            mDatePickerDialog.getDatePicker().setMinDate(mMinDate);
        }
        if (mMaxDate != 0) {
            mDatePickerDialog.getDatePicker().setMaxDate(mMaxDate);
        }
        mDatePickerDialog.show();
    }
    public DatePickerDialog getDatePickerDialog() {
        return mDatePickerDialog;
    }
    public void setMinDate(long minDate) {
        mMinDate = minDate;
    }
    public void setMaxDate(long maxDate) {
        mMaxDate = maxDate;
    }
}
Используя
EditText myEditText = findViewById(R.id.myEditText);
TextViewDatePicker editTextDatePicker = new TextViewDatePicker(context, myEditText, minDate, maxDate);
//TextViewDatePicker editTextDatePicker = new TextViewDatePicker(context, myEditText); //without min date, max date
Ответ 13
Я пробовал все, что было предложено, но у всех из них есть свои проблемы.
Лучшим решением, на мой взгляд, было бы использовать макет фрейма, как показано ниже:
<FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                .... />
            <View
                android:id="@+id/invisible_click_watcher"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true" />
</FrameLayout>
а затем добавив код DatePickerDialog, который был прекрасно написан в ответе @Android.
Ответ 14
import android.app.DatePickerDialog;
import android.content.Context;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class DatePickerHelper {
private final Calendar calendar = Calendar.getInstance();
private final String dateFormat = "MM/dd/yy";
private TextView textView = null;
public DatePickerHelper(final Context context, TextView textView) {
    this.textView = textView;
    // Setup on click listener if the TextView is not null
    if (textView != null) {
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getDatePickerDialog(context).show();
            }
        });
    }
}
/**
 * Return a new date picker listener tied to the specified TextView field
 * @return
 */
private DatePickerDialog.OnDateSetListener getOnDateSetListener() {
    return new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, monthOfYear);
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.US);
            textView.setText(sdf.format(calendar.getTime()));
        }
    };
}
/**
 * Return new DatePickerDialog for field
 * @param context
 * @return
 */
private DatePickerDialog getDatePickerDialog(Context context) {
    return new DatePickerDialog(context, getOnDateSetListener(), calendar
            .get(Calendar.YEAR), calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH));
}
}
Использование:
  DatePickerHelper assessmentDueDateHelper = new DatePickerHelper(AssessmentsDetailActivity.this,
            (TextView) findViewById(R.id.assessmentDueDateEditText));
Ответ 15
Я подумал, что лучше переопределить класс EditText...
public class EditTextDP extends android.support.v7.widget.AppCompatEditText implements View.OnClickListener, DatePickerDialog.OnDateSetListener {
    public EditTextDP(Context context) {
        super(context);
        setOnClickListener(this);
        setFocusable(false);
    }
    public EditTextDP(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnClickListener(this);
        setFocusable(false);
    }
    public EditTextDP(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOnClickListener(this);
        setFocusable(false);
    }
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        setText(new StringBuilder().append(dayOfMonth).append("/").append(monthOfYear + 1).append("/").append(year));
    }
    @Override
    public void onClick(View v) {
        Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
        DatePickerDialog dialog = new DatePickerDialog(getContext(), this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
        dialog.show();
    }
}
И используйте это в XML вместо этого...
            <*.*.*.EditTextDP
                android:id="@+id/c1_dob_hm"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/round_edittext_white"
                android:ems="10"
                android:padding="8dp">
            </*.*.*.EditTextDP>
Ответ 16
Использовать этот
your_edittext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    final Calendar calendar = Calendar.getInstance();
                    int yy = calendar.get(Calendar.YEAR);
                    int mm = calendar.get(Calendar.MONTH);
                    int dd = calendar.get(Calendar.DAY_OF_MONTH);
                    DatePickerDialog datePicker = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                            String date = String.valueOf(dayOfMonth) + "/" + String.valueOf(monthOfYear+1)
                                    + "/" + String.valueOf(year);
                            your_edittext.setText(date);
                        }
                    }, yy, mm, dd);
                    datePicker.show();
                }
            });
Ответ 17
Порт Kotlin, вызов функции setDatePicker
private fun setDatePicker(dateEditText: EditText) {
    val myCalendar = Calendar.getInstance()
    val datePickerOnDataSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
        myCalendar.set(Calendar.YEAR, year)
        myCalendar.set(Calendar.MONTH, monthOfYear)
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
        updateLabel(myCalendar, dateEditText)
    }
    dateEditText.setOnClickListener {
        DatePickerDialog([email protected], datePickerOnDataSetListener, myCalendar
                .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH)).show()
    }
}
private fun updateLabel(myCalendar: Calendar, dateEditText: EditText) {
    val myFormat: String = "dd-MMM-yyyy"
    val sdf = SimpleDateFormat(myFormat, Locale.UK)
    dateEditText.setText(sdf.format(myCalendar.time))
}
Ответ 18
Попробуй это
btn=(Button)findViewById(R.id.chs);
    final Dialog dialog = new Dialog(MainActivity.this);
    dialog.setCanceledOnTouchOutside(true);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.setContentView(R.layout.datepickerdialog);
            dp=(DatePicker) dialog.findViewById(R.id.btp);
            dialog.show();
            ok=(Button)dialog.findViewById(R.id.btn1);
            ok.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
        }
    });
Ответ 19
editText.setOnClickListener (новый View.OnClickListener() {
    @Override
    public void onClick(final View v) {
        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);
        final DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(),
                new DatePickerDialog.OnDateSetListener() {
                    String fmonth, fDate;
                    int month;
                    @Override
                    public void onDateSet(DatePicker view, int year,
                                          int monthOfYear, int dayOfMonth) {
                        try {
                            if (monthOfYear < 10 && dayOfMonth < 10) {
                                fmonth = "0" + monthOfYear;
                                month = Integer.parseInt(fmonth) + 1;
                                fDate = "0" + dayOfMonth;
                                String paddedMonth = String.format("%02d", month);
                                editText.setText(fDate + "/" + paddedMonth + "/" + year);
                            } else {
                                fmonth = "0" + monthOfYear;
                                month = Integer.parseInt(fmonth) + 1;
                                String paddedMonth = String.format("%02d", month);
                                editText.setText(dayOfMonth + "/" + paddedMonth + "/" + year);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }, mYear, mMonth, mDay);
        datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
        datePickerDialog.show();
    }
});
Ответ 20
public class DatePickerActivity extends AppCompatActivity {
    Button button;
    static TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button= (Button) findViewById(R.id.btn_click);
        textView= (TextView) findViewById(R.id.txt_date);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogFragment newFragment=new DatePickerFragment();
                newFragment.show(getFragmentManager(), "datepicker");
            }
        });
    }
    public class DatePickerFragment extends DialogFragment implements    DatePickerDialog.OnDateSetListener{
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int  day) {
            String years=""+year;
            String months=""+(monthOfYear+1);
            String days=""+day;
            if(monthOfYear>=0 && monthOfYear<9){
                months="0"+(monthOfYear+1);
            }
            if(day>0 && day<10){
                days="0"+day;
            }
            textView.setText(days+"/"+months+"/"+years);
        }
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            //use the current date as the default date in the picker
            final Calendar c=Calendar.getInstance();
            int year=c.get(Calendar.YEAR);
            int month=c.get(Calendar.MONTH);
            int day=c.get(Calendar.DAY_OF_MONTH);
            DatePickerDialog datePickerDialog=null;
            datePickerDialog=new DatePickerDialog(getActivity(), this, year,  month, day);
            return datePickerDialog;
        }
    }
}
Ответ 21
отлично работает для меня
 Я определяю в режиме EditText
android:focusable="false"
Ответ 22
Попробуйте следующее:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
DataPickerListener listener;
public DatePickerFragment(DataPickerListener l) {
    listener = l;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the date picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    return new DatePickerDialog(getActivity(),
            AlertDialog.THEME_HOLO_LIGHT, this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
    month = month + 1;
    String stringOfDate = day + "-" + month + "-" + year;
    listener.setDate(stringOfDate);
    Util.Log(stringOfDate);
}
@Override
public void onCancel(DialogInterface dialog) {
    // TODO Auto-generated method stub
    super.onCancel(dialog);
    listener.cancel();
}
public static interface DataPickerListener {
    void setDate(String date);
    void cancel();
}
}
// use this function to open datePicker popup
DialogFragment newFragment;
public void pickDate() {
    if (newFragment == null)
        newFragment = new DatePickerFragment(new PickDateListener());
    newFragment.show(getFragmentManager(), "Date Picker");
}
class PickDateListener implements DataPickerListener {
    @Override
    public void setDate(String date) {
        createSpiner(date);
        onetouch = false;
    }
    @Override
    public void cancel() {
        onetouch = false;
    }
}
Ответ 23
    EditText text = (EditText) findViewById(R.id.editText);
    text.setOnClickListener(new OnClickListener(){
       @RequiresApi(api = Build.VERSION_CODES.N)
       @Override
       public void onClick(View view) {
             DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
               @Override
               public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
                   String date = i2 + "/" + (++i1) + "/" + i;
                   text.setText(date);
                }
        },year,month,date);
       }
    });  
    datePickerDialog.show();
вы также можете установить минимальную дату и максимальную дату этими операторами.
   datepickerDialoge.getDatepicker().setMinDate(long Date);
   datepickerDialoge.getDatepicker().setMaxDate(long Date);
Примечание: добавьте эту строку перед datepickerDialog.show(); выражение вы получите дату следующим образом: = 12/2/2017.
Надеюсь, мой ответ поможет.
Ответ 24
 Не забудьте указать атрибуты Edittext в следующем:
android:clickable="true"
android:focusable="false"
Ответ 25
editText1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DatePickerDialog.OnDateSetListener dpd = new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,
                                      int dayOfMonth) {
                    int s = monthOfYear + 1;
                    String a = dayOfMonth + "/" + s + "/" + year;
                    editText1.setText(a);
                }
            };
            Time date = new Time();
            DatePickerDialog d = new DatePickerDialog(UpdateStore.this, dpd, date.year, date.month, date.monthDay);
            d.show();
        }
    });
Ответ 26
Если вы не хотите испортить свою деятельность или фрагмент логикой выбора даты и просто хотите открыть диалог выбора даты и получить обратный вызов после выбранной даты, вы можете проверить мой ответ здесь.
Мой ответ: как всплывать datepicker при нажатии на edittext в фрагменте
Ответ 27
Диалог выбора даты
                Calendar c=Calendar.getInstance();
                Integer month=c.get(Calendar.MONTH);
                Integer day=c.get(Calendar.DAY_OF_MONTH);
                Integer year=c.get(Calendar.YEAR);
                DatePickerDialog datePickerDialog =new DatePickerDialog(Expenture_Activity.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                        et_from.setText(dayOfMonth+"/"+month+"/"+year);
                    }
                },day,month,year);
                datePickerDialog.show();
Ответ 28
Мое решение для Xamarin.Android с MvvmCross на основе Линь:
public class DatePickerEditText : EditText, DatePickerDialog.IOnDateSetListener
{
    IDisposable _clickSubscription;
    public override bool Clickable => true;
    protected DatePickerEditText(IntPtr javaReference, JniHandleOwnership transfer)
        : base(javaReference, transfer)
        => Init();
    public DatePickerEditText(Context context) : base(context)
        => Init();
    public DatePickerEditText(Context context, IAttributeSet attrs) 
        : base(context, attrs)
        => Init();
    public DatePickerEditText(Context context, IAttributeSet attrs, int defStyleAttr) 
        : base(context, attrs, defStyleAttr)
        => Init();
    public DatePickerEditText(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) 
        : base(context, attrs, defStyleAttr, defStyleRes)
        => Init();
    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            _clickSubscription?.Dispose();
            _clickSubscription = null;
        }
        base.Dispose(disposing);
    }
    public void OnDateSet(DatePicker view, int year, int month, int dayOfMonth)
        => Text = view.DateTime.ToString("d", CultureInfo.CurrentUICulture);
    void Init()
    {
        SetFocusable(ViewFocusability.NotFocusable);
        _clickSubscription = this.WeakSubscribe(nameof(Click), OnClick);
    }
    void OnClick(object sender, EventArgs e)
    {
        var date = DateTime.Today;
        try
        {
            date = DateTime.Parse(Text, CultureInfo.CurrentUICulture);
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex);
        }
        var dialog = new DatePickerDialog(Context,
                                          this,
                                          date.Year,
                                          date.Month,
                                          date.Day);
        dialog.Show();
    }
}
Для ванильной версии Xamarin.Android просто замените WeakSubscribe обычной подпиской на событие Click EditText, не забывая отписаться в переопределении метода Dispose.
Ответ 29
Используйте эту простую технику, чтобы сделать это:
Шаг 1: СОЗДАТЬ ФРАГМЕНТНЫЙ ДИАЛОГ
public class DatePickerFragmentDialog  extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener) getActivity(), year, month, day);
    }
}
Шаг 2: В НЕОБХОДИМОЙ ДЕЯТЕЛЬНОСТИ СЛЕДУЙТЕ ЭТОМУ
-  Действие должно реализовывать: DatePickerDialog.OnDateSetListener 
-  Установите onClickListener на кнопку: DialogFragment datePicker = new DatePickerFragmentDialog(); datePicker.show(getSupportFragmentManager(), "Custom Date Picker");
Шаг 3: переопределить OnDateSetListener
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        @SuppressLint("SimpleDateFormat") DateFormat dateFormat = new 
        SimpleDateFormat("MM/dd/yyyy");
        String currentDateString = dateFormat.format(calendar.getTime());
        tvPaymentDate.setText(currentDateString);
    }
Поэтому мы можем использовать любое форматирование для даты :)
