2015-04-16 67 views
0

在我的應用中,用戶可以進入全屏模式。在該模式下,無論用戶何時觸摸屏幕,它都會切換系統用戶界面的可見性。Android setSystemUiVisibility連續調用不起作用

如果UI被隱藏,則兩次觸摸會在彼此的約1秒鐘內出現(在現實世界中很長時間),UI顯示正常,但導航欄不會再次隱藏。這是儘管調用view.setSystemUiVisibility()正確的標誌來隱藏它。

有問題的視圖是activity.getWindow().getDecorView()

在第二次觸摸正確隱藏系統UI之前等待1.5秒或更長時間。

標誌:

private static final int STATIC_LAYOUT_FLAGS = 
     View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
     View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | 
     View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; 

private static final int HIDDEN_FLAGS = 
     STATIC_LAYOUT_FLAGS | 
     View.SYSTEM_UI_FLAG_FULLSCREEN | 
     View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 

再次澄清,這是預期的行爲:

  1. 狀態欄和導航欄被隱藏,開始與
  2. 觸屏顯示狀態欄和導航欄
  3. 第二屏觸摸隱藏狀態欄和導航欄

如果步驟(2)和步驟(3)之間的時間少於約1秒,則導航欄不能正確隱藏(但狀態欄會)。在這種情況下,標記SYSTEM_UI_FLAG_HIDE_NAVIGATION而不是集,儘管它是發送到setSystemUiVisibility()的參數的一部分。

添加調試語句會導致足夠的延遲,導致不良行爲不再顯示。

爲什麼?我怎樣才能解決這個問題?

+0

目前的「解決方案」是每隔100ms在一個區間內隱藏ui,直到取得適當的效果。 – William

回答

1

我遇到了同樣的問題:https://stackoverflow.com/a/32800094/4449456,找到了根本原因。它可以防止應用程序在全屏模式下鎖定設備。因此,每次用戶點擊屏幕時都會顯示導航欄,系統將跳過您的setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) 1000 ms。