繁体   English   中英

Android 边缘到边缘插入的传感器方向问题

[英]Android sensor orientation problems with edge-to-edge insets

在边到边模式下,检查各种插图(状态栏、导航栏等)以调整您的 UI 通常很有用。 不幸的是,当设备处于传感器支持的方向(例如 sensorLandscape)时 - 当从横向更改为反向横向时,不会重新创建 Activity。 反向风景插图与风景插图不同。 这会导致不知道何时围绕更新的插图重新调整 UI 的问题。

自己处理方向变化也不会触发横向和反向横向转换之间的onConfigurationChanged回调。 OrientationListener只会告诉您当前的方向度数,这很难准确地与手机进行反向翻转的时间相对应。 大多数手机不支持反向纵向,有些不支持反向横向,因此也很难知道手机是否真的翻转到反向横向(在OrientationListener中轮询 requestedOrientation 仅将其显示为 sensorLandscape 而不是当前的内容是)。

有什么方法可以获取景观-> 反向景观活动娱乐活动,或者至少在活动翻转到反向时检测或收到通知?

我找到的唯一可行的解决方案需要轮询,而且有点复杂;

1)确定设备的自然方向。 这是通过将当前方向(只能是横向或纵向)与显示器当前旋转进行比较来完成的。

  • 0度或180度旋转的人像自然是人像
  • 90度或270度旋转的人像自然是风景
  • 0度或180度旋转的风景自然是风景
  • 90 度或 270 度旋转的风景自然是肖像

自然纵向意味着当显示器为纵向时旋转为 0,同样自然横向意味着当显示器为横向时旋转为 0。

注意:虽然是角落情况 - 这需要在不旋转的情况下完成,因为当前方向和显示旋转暂时不同步。 如果你轮询它几次以消除它的抖动,你可以确保你没有在旋转中捕捉到它。

2)现在您知道了自然方向,您可以随时轮询当前显示旋转并确定您当前的真实方向。

对于自然纵向显示:

  • 0是纵向
  • 90是风景
  • 180是反人像
  • 270是反向风景

对于自然景观显示:

  • 0是风景
  • 90是反人像
  • 180是反向风景
  • 270是纵向

最后,我设置了一个共享协程 channelFlow,它在订阅时以 250 毫秒的延迟循环轮询显示旋转,并在发现时吐出当前方向 + 增量。 所以现在我可以订阅更新并知道方向何时更改为任何方向或反向,并且可以根据需要重新调整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM