三星 Galaxy S7 Edge 忽略 datePickerMode
Samsung Galaxy S7 Edge ignores datePickerMode
我将样式文件中的 datePickerMode
设置为 spinner
,如下所示:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:dialogTheme">@style/MyDialogTheme</item>
<item name="android:datePickerStyle">@style/MyDatePicker</item>
</style>
<style name="ItvDialogTheme" parent="android:Theme.Material.Light.Dialog">
<item name="android:datePickerStyle">@style/MyDatePicker</item>
</style>
<style name="MyDatePicker" parent="android:Widget.Material.Light.DatePicker">
<item name="android:datePickerMode">spinner</item>
</style>
然后创建一个 DatePicker
DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(final DatePicker view, final int year, final int monthOfYear, final int dayOfMonth) {
//handle result
}
};
DatePickerDialog dialog = new DatePickerDialog(this, onDateSetListener, dob.getYear(), dob.getMonth() - 1,
dob.getDay());
dialog.show();
这在包括 Android 6 上的 Samsung Galaxy S7 Edge 在内的很多设备上运行良好,但自从将设备更新到 Android 7 后,它忽略了模式 spinner
并显示日历。
微调器在 Android 7.1.1 上的 One Plus 3 上工作正常。
有什么想法吗?
你可以试试这个。
datePicker.setCalendarViewShown(假);
You Should try to raise the
targetSdkVersion to 24 because of the android 7.0
您可能 运行 关注此问题 (#37120178) datepicker dialog can't switch to spinner on Android 7.0 device。如果是这样,该页面上记录了一个解决方法。 我还没有尝试过变通办法,但值得一试。(变通办法的实施见下文。)
顺便说一句,我有一台三星S7(不是edge)运行 7.0。如果我在 XML 中定义它,我可以获得一个 DatePicker
微调器,因此另一个解决方法是在 XML 中定义 DatePicker
微调器并在对话框中使用它。
奇怪,但错误报告中的那些修复似乎是针对时间选择器的,尽管该报告是针对日期选择器的。我仔细研究了一下,发现 Use DatePicker spinners in API 24 是一个潜在的修复方法。 同样,我还没有尝试过这个。
这个反射逻辑似乎确实有效。它为我显示了日历视图旁边的微调器。如果您只想要微调器,则需要将以下内容添加到您的样式中:
<item name="android:calendarViewShown">false</item>
(此解决方法归功于 lognaturel and jeffdgr8)。
这是我的自定义 DatePickerDialog
使用反射逻辑的样子:
public class MyReflectionDatePickerDialog extends DatePickerDialog {
private DatePicker mDatePicker;
@RequiresApi(api = Build.VERSION_CODES.N)
public MyReflectionDatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener listener,
int year, int month, int dayOfMonth) {
super(context, listener, year, month, dayOfMonth);
fixSpinner(context, year, month, dayOfMonth);
}
// include gist here from:
// https://gist.github.com/lognaturel/232395ee1079ff9e4b1b8e7096c3afaf
}
您可以如下所示实例化此自定义视图:
DatePickerDialog dialog;
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.N) {
dialog = new MyDatePickerDialog(this, onDateSetListener, dob.getYear(),
dob.getMonth() - 1, dob.getDay());
} else {
dialog = new DatePickerDialog(this, onDateSetListener, dob.getYear(),
dob.getMonth() - 1, dob.getDay());
}
我将样式文件中的 datePickerMode
设置为 spinner
,如下所示:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:dialogTheme">@style/MyDialogTheme</item>
<item name="android:datePickerStyle">@style/MyDatePicker</item>
</style>
<style name="ItvDialogTheme" parent="android:Theme.Material.Light.Dialog">
<item name="android:datePickerStyle">@style/MyDatePicker</item>
</style>
<style name="MyDatePicker" parent="android:Widget.Material.Light.DatePicker">
<item name="android:datePickerMode">spinner</item>
</style>
然后创建一个 DatePicker
DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(final DatePicker view, final int year, final int monthOfYear, final int dayOfMonth) {
//handle result
}
};
DatePickerDialog dialog = new DatePickerDialog(this, onDateSetListener, dob.getYear(), dob.getMonth() - 1,
dob.getDay());
dialog.show();
这在包括 Android 6 上的 Samsung Galaxy S7 Edge 在内的很多设备上运行良好,但自从将设备更新到 Android 7 后,它忽略了模式 spinner
并显示日历。
微调器在 Android 7.1.1 上的 One Plus 3 上工作正常。
有什么想法吗?
你可以试试这个。
datePicker.setCalendarViewShown(假);
You Should try to raise the targetSdkVersion to 24 because of the android 7.0
您可能 运行 关注此问题 (#37120178) datepicker dialog can't switch to spinner on Android 7.0 device。如果是这样,该页面上记录了一个解决方法。 我还没有尝试过变通办法,但值得一试。(变通办法的实施见下文。)
顺便说一句,我有一台三星S7(不是edge)运行 7.0。如果我在 XML 中定义它,我可以获得一个 DatePicker
微调器,因此另一个解决方法是在 XML 中定义 DatePicker
微调器并在对话框中使用它。
奇怪,但错误报告中的那些修复似乎是针对时间选择器的,尽管该报告是针对日期选择器的。我仔细研究了一下,发现 Use DatePicker spinners in API 24 是一个潜在的修复方法。 同样,我还没有尝试过这个。
这个反射逻辑似乎确实有效。它为我显示了日历视图旁边的微调器。如果您只想要微调器,则需要将以下内容添加到您的样式中:
<item name="android:calendarViewShown">false</item>
(此解决方法归功于 lognaturel and jeffdgr8)。
这是我的自定义 DatePickerDialog
使用反射逻辑的样子:
public class MyReflectionDatePickerDialog extends DatePickerDialog {
private DatePicker mDatePicker;
@RequiresApi(api = Build.VERSION_CODES.N)
public MyReflectionDatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener listener,
int year, int month, int dayOfMonth) {
super(context, listener, year, month, dayOfMonth);
fixSpinner(context, year, month, dayOfMonth);
}
// include gist here from:
// https://gist.github.com/lognaturel/232395ee1079ff9e4b1b8e7096c3afaf
}
您可以如下所示实例化此自定义视图:
DatePickerDialog dialog;
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.N) {
dialog = new MyDatePickerDialog(this, onDateSetListener, dob.getYear(),
dob.getMonth() - 1, dob.getDay());
} else {
dialog = new DatePickerDialog(this, onDateSetListener, dob.getYear(),
dob.getMonth() - 1, dob.getDay());
}