How to set Android DatePicker mode to spinner for APIs below level 21

racumin picture racumin · Feb 12, 2017 · Viewed 11.3k times · Source

I want to display a DatePickerDialog with mode spinner instead of calendar. In my styles.xml, I tried to put this attribute but it says that the minimum SDK version I should be using is API 21.

<item name="android:datePickerMode">spinner</item>

I am using minimum SDK version 18. How do I set the default date picker mode to spinner for APIs lower than API 21?

This is my Java code for my date picker:

public class MyDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), R.style.MyTheme, this, 0, 0, 0 );
    return datePickerDialog;
}

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

}

}

Thanks!

Answer

racumin picture racumin · Feb 13, 2017

Found an answer. Instead of creating a new DatePickerDialog in the onCreateDialog method, I just created my own layout for the date picker inflated it in the method.

Here is the xml layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<DatePicker
    android:id="@+id/dialog_date_datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:calendarViewShown="false"
    android:datePickerMode="spinner"
    android:spinnersShown="true">
</DatePicker>

And here is the Java code:

public class MyDatePicker extends DialogFragment {
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View v = getActivity().getLayoutInflater().inflate(R.layout.datepicker, null);
        return new AlertDialog.Builder(getActivity()).setView(v).create();
    }
}

Thanks!