0

Is it possible to allow datePicker only display date and hide year and month ?

I have two activities, in Activity A, I have datePicker which only display month and year. In Activity B, I want datePicker display only date, but can't find any solutions from internet.

ScreenShot of Activity A

enter image description here

Assume user select Jun 2018. Then in Activity B, the datePicker will show Jun 2018 as the dialog title and only allow user to select the date.

Activity B

   month = getIntent().getStringExtra("month"); // Jun 2018

    date.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    showDialog(DATE_DIALOG_ID);
                }
            });

     DatePickerDialog.OnDateSetListener mDateSetListner = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                                  int dayOfMonth) {

                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
            }
        };

        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
                case DATE_DIALOG_ID:
                    DatePickerDialog datePickerDialog = this.customDatePicker();
                    return datePickerDialog;
            }
            return null;
        }

private DatePickerDialog customDatePicker() {
        DatePickerDialog dpd = new DatePickerDialog(this, mDateSetListner,
                mYear, mMonth, mDay);
        try {
            Field[] datePickerDialogFields = dpd.getClass().getDeclaredFields();
            for (Field datePickerDialogField : datePickerDialogFields) {
                if ((datePickerDialogField.getName().equals("mYearPicker"))||(datePickerDialogField.getName().equals("mMonthPicker"))) {
                    datePickerDialogField.setAccessible(true);
                    DatePicker datePicker = (DatePicker) datePickerDialogField
                            .get(dpd);
                    Field datePickerFields[] = datePickerDialogField.getType()
                            .getDeclaredFields();
                    for (Field datePickerField : datePickerFields) {
                        if ("mDayPicker".equals(datePickerField.getName())
                                || "mDaySpinner".equals(datePickerField
                                .getName())) {
                            datePickerField.setAccessible(true);
                            Object dayPicker = new Object();
                            dayPicker = datePickerField.get(datePicker);
                            ((View) dayPicker).setVisibility(View.GONE);
                        }
                    }
                }

            }
        } catch (Exception ex) {
        }
        return dpd;
    }
John Joe
  • 12,412
  • 16
  • 70
  • 135

1 Answers1

2

Try below code

DatePickerDialog dpd = new DatePickerDialog(getActivity(), this, year, month, day);
        try {
            Field[] datePickerDialogFields = dpd.getClass().getDeclaredFields();
            for (Field datePickerDialogField : datePickerDialogFields) {
                if (datePickerDialogField.getName().equals("mDatePicker")) {

                    datePickerDialogField.setAccessible(true);
                    DatePicker datePicker = (DatePicker) datePickerDialogField
                            .get(dpd);
                    Field datePickerFields[] = datePickerDialogField.getType()
                            .getDeclaredFields();
                    for (Field datePickerField : datePickerFields) {
                        if ("mYearPicker".equals(datePickerField.getName())
                                || "mYearSpinner".equals(datePickerField
                                .getName()||"mMonthPicker".equals(datePickerField.getName())||"mMonthSpinner".equals(datePickerField.getName())) {
                            datePickerField.setAccessible(true);
                            Object dayPicker = new Object();
                            dayPicker = datePickerField.get(datePicker);
                            ((View) dayPicker).setVisibility(View.GONE);
                        }
                    }
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
Surya Prakash Kushawah
  • 3,185
  • 1
  • 22
  • 42