移动到 1/3 屏幕宽度时未调用 onConfigurationChanged

Posted

技术标签:

【中文标题】移动到 1/3 屏幕宽度时未调用 onConfigurationChanged【英文标题】:onConfigurationChanged not called when moving to 1/3 screen width 【发布时间】:2017-05-23 23:27:26 【问题描述】:

我正在更新我的 android 应用程序以支持 Android 7 中的多窗口模式。由于应用程序已经在 onConfigurationChanged 中处理旋转更改,我想以相同的方式处理窗口大小更改。因此,我更新了 AndroidManifest.xml,将 android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout" 包含在我的活动中。

这在调整窗口大小时按预期工作,因此我的应用程序占据了屏幕的 2/3 或 1/2:调用了 onConfigurationChanged,并且我的活动没有重新启动。但是,当我将应用程序的大小调整为 1/3 屏幕大小或从 1/3 屏幕大小调整时(因此我的应用程序只占用屏幕的 1/3,另一个应用程序占用剩余的 2/3),该应用程序的行为就像我没有那些 configChanges values: onConfigurationChanged 没有被调用,我的activity被重启了。

我检查了configChanges 的可能值,但没有看到任何其他看起来相关的内容。

是否有任何理由让它以这种方式工作,或者这是一个 Android 错误?我在 Google Pixel C 平板电脑上运行 Android 7.1.2。

【问题讨论】:

“但是当我将我的应用程序调整为屏幕大小的 1/3 或从屏幕大小调整时(所以我的应用程序只占用屏幕的 1/3,而另一个应用程序占用了剩余的 2/3)” -- by这个,你的意思是你是屏幕的 1/2,然后滑动分隔线让你的活动是屏幕的 1/3? 是的。或者当我再次从 1/3 滑回 1/2 时。 【参考方案1】:

根据Preparing for multi-window blog post,您需要处理多窗口的configChanges 的最小集合是:

android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"

您缺少smallestScreenSize,当您的活动的最小宽度发生变化时会发生这种情况。

【讨论】:

你成功了! *** 让我在 10 分钟内接受。 :-) P.S.我很高兴能直接从 Google 员工那里得到答复。感谢 Google 开展此类外展活动。 @arlomedia - 乐于助人!我还提交了一个内部文档错误以将其添加到 multi-window documentation page 中。 这(除其他外)仍然是不必要的复杂。我们希望提供开箱即用的简单 API,这些 API 是明确的、最小的、切中要害的。当你不得不浪费时间最终发现你错过了一个特殊的标志或一个特殊的电话来神奇地解决你 75% 的问题,然后再花几个小时找到一个不同的神奇标志来解决时,这真的很烦人剩下的 25%。至少 AppCompat 应该足够灵活,可以在 Android SDK 中实现设计良好的 API,而不是默认 API。

以上是关于移动到 1/3 屏幕宽度时未调用 onConfigurationChanged的主要内容,如果未能解决你的问题,请参考以下文章

如何在页面加载时设置 useState 挂钩的状态?

返回屏幕时未在 React Native 中调用 useEffect

在Android中锁定屏幕时未调用BroadcastReceiver

SWIFT:触摸屏幕时未调用 touchesEnded

关闭屏幕时未调用 UICollectionView performBatchUpdates 完成

从概览屏幕恢复应用时未调用 onActivityResult(最近)