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
我的项目需要的是一个带有年份和月份选择的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