Android TimePicker 在横向模式下无法很好地显示

Posted

技术标签:

【中文标题】Android TimePicker 在横向模式下无法很好地显示【英文标题】:Android TimePicker not displayed well on landscape mode 【发布时间】:2016-02-18 23:02:38 【问题描述】:

我目前正在构建一个面向 API 23 的应用,最低 API 16。 我面临一个问题,即 TimePicker 在 AlertDialog 中显示。在 Nexus 5 API

在 Nexus 5 API 23(纵向)上: TimePicker on Portrait mode (API 23)

在 Nexus 5 API 23(横向)上: TimePicker on Landscape mode (API 23)

【问题讨论】:

你有什么问题? 如何解决这个显示问题?我只在 M 上面临这个问题。 【参考方案1】:

您必须从时间选择器对话框中删除设置的标题,然后您将在 Nexus 5 中看到时间选择器对话框。此问题发布在谷歌论坛上,请参见以下链接:

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();

【讨论】:

【参考方案2】:

我有这个问题。 这对我有帮助:

timePicker.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

【讨论】:

timePicker 大小问题。 你在哪里调用这个方法?在onCreate()? 是的。一段时间后,我找到了更正确的解决方案。尝试为时间选择器设置最小高度,但我不记得确切的值或在滚动视图中包装 datepicker 并设置 timePicker 高度和宽度值 wrap_content。 当他的真实身高减去一些数值时,TimePicker 显示错误。也许当高度小于 495dp 位时,它并不完全是值。 感谢您宝贵的cmets。我会让你知道结果如何。也许我什至会把我的答案放在这里。【参考方案3】:

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 设备上。它显示了与标题完全相同的对话框。

2。如果您必须在对话框中显示标题:

您应该阅读TimePickerDialog 的源代码。没有别的办法。 我没有对源代码进行完全的愤怒模式,因为我有幸将其设置为null

相信你会发现包私有类AlertController的私有方法setupTitle()很有意思。 AlertControler 用于AlertDialog 业务逻辑。

【讨论】:

以上是关于Android TimePicker 在横向模式下无法很好地显示的主要内容,如果未能解决你的问题,请参考以下文章

如何在横向模式下制作 UI

Android应用在横向模式下留下间距

在横向模式下强制运行android模拟器

Android 工具栏:横向模式下的小标题文本

Android 23 及更小版本在横向模式下不会填满所有屏幕

VideoView 在横向模式下全屏显示