簡體   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