4

我有一項服務,它爲窗口管理器添加了一些視圖(類似Facebook的聊天頭)。即使我在相機應用程序中,這種觀點始終保持在一切之上。 是否有可能知道某些活動(如相機或視頻播放器)何時全屏使用,以便隱藏我的視圖?接收隱藏狀態欄/在服務上輸入全屏活動事件

編輯:

有一種叫做View.OnSystemUiVisibilityChangeListener但它需要API 11.我的目標是9,但看起來這正是我需要的。 API 9的任何替代方案?

回答

3

好的,如果有人有興趣,我已經用這種方法解決了我的問題: 爲窗口管理器添加了一個透明視圖,寬度爲1px,match_parent爲height。然後在這個視圖中添加一個全局佈局監聽器,每當佈局發生變化時,我都會在屏幕上檢查這個視圖的位置。如果Y爲0,則狀態欄不可見,所以全屏應用程序必須正在運行。這比原生View.OnSystemUiVisibilityChangeListener更有效,因爲它似乎有一些應用程序不會觸發該方法(如新的yahoo天氣)。

+1

輝煌。這個概念是基於這樣一個事實:當任何應用程序進入全屏並隱藏狀態欄時,屏幕上的視圖的y座標(使用view.getLocationOnScreen(locationArray)檢索)將自動減少狀態欄的高度反之亦然)。由於重繪視圖,y中的更改觸發附加到視圖的onLayoutChangeListener。 –

+0

但是,我遇到了一個很大的問題 - getLocationOnScreen在方向更改時不可靠。例如。從非全屏應用程序啓動一個立即改變方向的全屏應用程序,然後按主頁按鈕。 getLocationOnScreen無法正確更新。 –

+0

我發現了一個不依賴getLocationOnScreen的方法!大體上與您的方法相同,只是我們檢查視圖的高度(getHeight())是否等於佈局上的偵聽器中窗口的高度;如果它是平等的,這意味着該應用程序全屏。和onConfigurationChanged一樣,我們必須記得使用windowManager.getDefaultDisplay()。getSize(windowSize);來更新windowSize.y所訪問的窗口的高度。 http://stackoverflow.com/a/34215751/2669960 –