android - 在多窗口模式下窗口大小为 2/3 时,Activity 不会在方向更改时重新启动

标签 android user-interface multi-window

我在多窗口模式下遇到方向更改问题。 当平板电脑设备的窗口大小为 2/3(在多窗口模式下)时, Activity 不会在更改方向时重新启动。因此,我的布局看起来不合适。

在多窗口模式下,当窗口大小为显示大小的 1/2 或 1/3 时, Activity 会在更改方向时正确重启。 我在带有 Oreo 和 Pie 图像的 (Android Studio) Emulator 中使用 Nexus 7 和 Pixel C 设备尝试并确认了这一点。

我的应用以 Oreo 8.1 为目标,我没有在 list 中使用“android:configChanges”或“android:screenOrientation”。

请注意,2/3 窗口大小不是正方形,屏幕大小在两个方向上都有微小变化,如果方向更改未触发,则屏幕大小更改应触发 Activity 重启。

重现步骤:

  1. 在平板设备上以 Debug模式启动应用。
  2. 在 onCreate 和 onResume 中放置断点。
  3. 将其置于多窗口模式(默认 1/2 大小)。
  4. 旋转设备并检查断点是否触发(它会触发)。
  5. 将窗口大小调整为 2/3。
  6. 旋转设备并检查断点是否触发(它没有!)。

我是否遗漏了导致此问题的原因?或者这是一个错误还是其他什么?在这种情况下,如何让我的 Activity 重新启动?

最佳答案

一个有趣的问题,我从来不知道方向变化过程也有异常(exception)。我能够使用 Pixel C 模拟器 (Android 8.1) 和针对 API 级别 26 的应用重现该问题。

我想你的屏幕不仅仅是另一个列表,因为在这种情况下,12 像素的差异(1688 与 1676 如果我可以相信 LayoutInspector )无关紧要,所以我想添加一个可能有用的观察:

我的应用程序包含一个自定义的View,从日志中我可以看到调用了它的方法onMeasure()onLayout()即使 ActivityonCreate() 不是。所以这是您可以介入并进行一些微调的地方。

另一种选择是强制重新创建 Activity。您可以在检测到屏幕尺寸发生变化后立即调用 Activity 方法 recreate()(记录在 here 中)。要跟踪屏幕尺寸的变化,您可以创建一个自定义的 ViewGroup 覆盖 onLayout() 并将其用作您的 Activity 的根s 布局文件。

关于android - 在多窗口模式下窗口大小为 2/3 时,Activity 不会在方向更改时重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51934870/

相关文章:

python - 使用图表构建交易平台 - 对 Python GUI 库的建议

c# - Ultragrid 子行

c++ - Win32 C++ 重绘窗口

android - 在android中如何清除CharSequence中的元素?

android - 访问 token 更新 Dagger 和 Retrofit 时更新请求 header

android - 多窗口应用程序开发

javascript - 将控制权转移到新窗口 - chrome 打包应用程序

android - android 中是否可以有两个 Activity 应用程序?

java - Android在代码中访问XML常量实际值

java - 无法创建 MD5 哈希文件?