Android 没有日历的日期选择器用于卡片到期月份和年份选择

Android Datepicker without calendar for card expiry month and year selection

我的项目需要的是一个带有年份和月份选择的DatePickerFragment。我已经实施,但它在 "Lollipop" 版本中不起作用。我得到的是完整的日历,我不需要。

我发现通过使用 android:calendarViewShown="false" 添加日期选择器标签 android:datePickerMode="spinner" 在所有版本中显示没有日历的日期选择器。但我需要的是在日期选择器片段中是相同的。

我实现的代码如下

主要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");
        }
    });
}

片段代码如下

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
    }
}

我需要的所有版本都在下面的屏幕截图中给出

[![要求][2]][2]

试试下面的代码...

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;
}

并使用下面的代码调用它...

createDialogWithoutDateField().show();

参考以下link...Android DatePicker change to only Month and Year