-1

What I need in my project is a DatePickerFragment with year and month selection. I have implemented but It is not working in "Lollipop" Version. What i got there is full calendar, which I don't need.

I have found that by adding datepicker tag with android:calendarViewShown="false" android:datePickerMode="spinner" to show date picker without calendar in all versions. But what I need is is the same in the datepicker fragment.

The code which I have implemented is given below

Main Activity

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.btn1).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //showDatePicker();
            DatePickerFragment date = new DatePickerFragment();
            date.show(getSupportFragmentManager(), "Date Picker");
        }
    });
}

Fragment code is as follows

public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {


        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(), this, year, month, day);


    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
    }
}

What I need for all the versions is given in screenshot below

[![Requirement][2]][2]

Ajith
  • 2,476
  • 2
  • 17
  • 38

1 Answers1

0

Try the below code...

private DatePickerDialog createDialogWithoutDateField() {
    DatePickerDialog dpd = new DatePickerDialog(this, null, 2014, 1, 24);
    try {
        java.lang.reflect.Field[] datePickerDialogFields = dpd.getClass().getDeclaredFields();
        for (java.lang.reflect.Field datePickerDialogField : datePickerDialogFields) {
            if (datePickerDialogField.getName().equals("mDatePicker")) {
                datePickerDialogField.setAccessible(true);
                DatePicker datePicker = (DatePicker) datePickerDialogField.get(dpd);
                java.lang.reflect.Field[] datePickerFields = datePickerDialogField.getType().getDeclaredFields();
                for (java.lang.reflect.Field datePickerField : datePickerFields) {
                    Log.i("test", datePickerField.getName());
                    if ("mDaySpinner".equals(datePickerField.getName())) {
                        datePickerField.setAccessible(true);
                        Object dayPicker = datePickerField.get(datePicker);
                        ((View) dayPicker).setVisibility(View.GONE);
                    }
                }
            }
        }
    } 
    catch (Exception ex) {
    }
    return dpd;
}

and use below code to call it...

createDialogWithoutDateField().show();

with reference to the below link...Android DatePicker change to only Month and Year

Community
  • 1
  • 1
Jayamurugan
  • 542
  • 2
  • 10
  • Thanks, it removes the date from picker. But I need to work that on lollipop version as well, there i got full calendar – Ajith Dec 13 '16 at 10:46
  • But in lollipop version it shows full calendar, can we get the same in lollipop as well ? – Ajith Dec 13 '16 at 11:14
  • it's a cool hack until Google changes the name of the ID. Google definitely ought to provide this functionality out-of-the-box ! – Someone Somewhere May 01 '18 at 11:20