我似乎无法通过xml将datepickerdialog转换为微调框。我目前未使用有错误的API 24。我尝试通过定义一种新样式来做到这一点,并在像建议使用here那样初始化DatePickerDialog时使用它,但仍然无法正常工作;
<style name="CustomDatePickerDialog" parent="android:Theme.Material.Light.Dialog">
<item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:datePickerMode">spinner</item>
<item name="android:calendarViewShown">false</item>
<item name="android:spinnersShown">true</item>
</style>
这里是对话框的定义;
dialog = new DatePickerDialog(CurrentActivity.this, R.style.CustomDatePickerDialog, new DatepickerDialog.OnDateSetListener() {...}, y,m,d);
dialog.show();
奇怪的是,如果我在对话框声明之后并在显示它之前用这两行代码在代码中定义,它将仅向我显示微调器,这是我想要的;
dialog.getDatePicker().setCalendarViewShown(false);
dialog.getDatePicker().setSpinnersShown(true);
我无法弄清楚为什么xml在我身上不起作用,即使其他人似乎对此也很好。我使用的是错误的上下文吗?欢迎任何帮助。
EDIT:我遇到问题,因为我不想使用已弃用的两行来解决我的问题。因此,这意味着我也不想使用Theme_Holo_Light或其他类似的已弃用主题。
您可以调用此函数并将datepicker实例作为参数传递。
public static void getDateYearMonth(Activity activity, String date, DatePickerDialog.OnDateSetListener mDateSetListener) {
int year;
int month;
int day;
if (date == null || date.isEmpty()) {
Calendar cal = Calendar.getInstance();
year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH);
day = cal.get(Calendar.DAY_OF_MONTH);
} else {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm");
Date dateObj = null;
try {
dateObj = sdf.parse(date);
Calendar cal = Calendar.getInstance();
cal.setTime(dateObj);
year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH);
day = cal.get(Calendar.DAY_OF_MONTH);
} catch (ParseException e) {
e.printStackTrace();
Calendar cal = Calendar.getInstance();
year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH);
day = cal.get(Calendar.DAY_OF_MONTH);
}
}
DatePickerDialog dialog = new DatePickerDialog(
activity,
android.R.style.Theme_Holo_Light_Dialog_MinWidth,
mDateSetListener,
year, month, day);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
希望这可以解决您的问题。编码愉快!