在边缘到边缘模式中,检查各种插入(状态栏、导航栏等(以调整UI通常很有用。不幸的是,当设备处于传感器支持的方向(例如sensorLandscape(时,当从横向更改为反向横向时,"活动"不会被重新创建。反向横向镶嵌不同于横向镶嵌。这导致了知道何时根据更新的插入重新调整UI的问题。
自己处理方向更改也不会在横向和反向横向转换之间触发onConfigurationChanged回调。OrientationListener仅告诉您当前的方位度,当手机进行反向翻转时,很难准确地"计时"。大多数手机不支持反向纵向,有些不支持反向横向,因此也很难知道手机是否真的翻转到了反向横向(在OrientationListener中轮询requestedOrientation只显示为sensorLandscape,而不是当前的(。
有什么方法可以获得风景吗;反向横向活动重新创建,或者至少检测到或在活动翻转到反向时收到通知?
我发现的仅限的工作解决方案需要轮询,而且有点复杂;
1(确定设备的自然方向。这是通过将当前方向(仅为横向或纵向(与显示器当前旋转进行比较来实现的。
- 0或180度旋转的人像自然是人像
- 旋转90或270的人像自然是风景
- 0或180度旋转的景观是自然景观
- 旋转90或270度的风景自然是人像
自然纵向意味着当显示器为纵向时旋转为0,同样自然横向意味着当显示为横向时旋转为零。
注意:在拐角情况下-由于当前方向和显示器旋转短暂不同步,因此需要在不旋转的情况下进行此操作。如果你对它进行几次轮询以使它退出,你可以确保你没有在轮换中抓住它。
2(既然知道了自然方向,就可以随时轮询当前的显示旋转,并确定当前的真实方向。
对于自然的人像显示:
- 0是肖像
- 90是风景
- 180是反向肖像
- 270为反向横向
对于自然景观显示:
- 0为横向
- 90是反向肖像
- 180为反向横向
- 270是肖像
最后,我建立了一个共享的协同程序channelFlow,它在订阅时以250毫秒的延迟轮询循环中的显示旋转,并在发现当前方向+增量时吐出它们。所以现在我可以订阅更新,知道方向何时更改为任何方向或反向,并可以根据需要重新调整。