我目前正在构建一个针对API 23的应用,其API API最低。 我遇到的问题是在AlertDialog中显示TimePicker。在Nexus 5 API< = 22上启动应用程序时,在纵向模式和横向模式下,显示效果很好。但是,在Nexus 5 API 23上启动应用程序时,横向模式无法正确显示TimePicker小部件,它仅显示其背景颜色。
在Nexus 5 API 23(肖像)上: TimePicker on Portrait mode (API 23)
在Nexus 5 API 23(横向)上: TimePicker on Landscape mode (API 23)
答案 0 :(得分:6)
您必须从时间选择器对话框中删除设置标题,之后您将在Nexus 5中看到时间选择器对话。此问题发布在Google论坛上,请参阅以下链接:
https://code.google.com/p/android/issues/detail?id=201766
TimePickerDialog mTimePicker;
String[] time = txtTimeWriteOut.getText().toString().trim().split(":");
int hour = Integer.parseInt(time[0]);
int minute = Integer.parseInt(time[1]);
mTimePicker = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
txtTimeWriteOut.setText(TimeUtils.getDoubleDigits(selectedHour) + ":" + TimeUtils.getDoubleDigits(selectedMinute));
passTimeOut = currentDate + TimeUtils.getDoubleDigits(selectedHour) + TimeUtils.getDoubleDigits(selectedMinute) + "00";
}
}, hour, minute, true);
// mTimePicker.setTitle("Select Time");
mTimePicker.show();
答案 1 :(得分:1)
我有这个问题。 这对我有帮助:
timePicker.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
答案 2 :(得分:1)
如果您严格遵循official documentation on Pickers,则必须使用onCreateDialog()
方法执行以下操作:
不是创建TimePickerDialog
的新实例并立即返回,而是在返回之前调用setTitle(null)
,如下所示:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
/* ... */
Dialog dialogFragment = new TimePickerDialog(/* ... */);
dialogFragment.setTitle(null);
return dialogFragment;
}
我想指出,Android 5.0.2(Lollipop)上没有出现此问题。默认情况下,对话框没有标题。
Android 6.0设备上出现此问题。它显示了与标题完全相同的对话框。
您应该阅读TimePickerDialog的源代码。别无他法。
我没有在源代码上使用完全愤怒模式,因为我可以将其设置为null
。
我相信你可以找到包私有类AlertController的私有方法setupTitle()
非常有趣。 AlertControler
用于AlertDialog业务逻辑。