4

저는 윈도우 관리자에게 몇 가지보기를 추가하는 서비스를 가지고 있습니다 (페이스 북의 채팅 헤드와 같은 것). 이 뷰는 카메라 앱을 사용하는 경우에도 항상 모든 항목 위에 있습니다. 일부 활동 (예 : 카메라 또는 비디오 플레이어)이 전체 화면을 사용하고있을 때이를 알면 내 조회수를 숨길 수 있습니까?숨겨진 상태 표시 줄 수신/서비스의 전체 화면 활동 이벤트 입력

편집 :

이 View.OnSystemUiVisibilityChangeListener라는 뭔가있어하지만이 API 내 목표는 9 인 (11)이 필요하지만이 내가 필요 정확히처럼 보인다. API 9의 대안은 무엇입니까?

답변

3

좋아하는 사람이라면 다음과 같은 방법으로 문제를 해결했습니다. 1px 너비와 match_parent 높이로 투명하게보기를 창 관리자에 추가했습니다. 그런 다음이보기에 전역 레이아웃 수신기를 추가하고 레이아웃이 변경 될 때마다 화면에서이보기의 위치를 ​​확인합니다. Y가 0이면 상태 표시 줄이 보이지 않으므로 전체 화면 앱이 실행 중이어야합니다. 이것은 네이티브 View.OnSystemUiVisibilityChangeListener보다 더 잘 작동합니다. 왜냐하면 어떻게 든 그 메소드를 트리거하지 않는 앱 (새로운 야후 날씨와 같은)이 있기 때문입니다.

+1

브릴리언트. 이 개념은 화면에 표시된보기의 y 좌표 (view.getLocationOnScreen (locationArray)를 사용하여 검색 됨)가 모든 앱이 전체 화면으로 들어가고 상태 표시 줄을 숨길 때 상태 표시 줄의 높이만큼 자동으로 축소된다는 사실을 기반으로합니다 그 반대). y가 변경되면 뷰가 다시 그려져 뷰에 첨부 된 onLayoutChangeListener가 트리거됩니다. –

+0

그러나 방금 큰 문제가 발생했습니다. 방향이 바뀌면 getLocationOnScreen이 안정적이지 않습니다. 예 : 전체 화면 앱이 아닌 경우 방향이 바로 바뀌는 전체 화면 앱을 실행 한 다음 홈 버튼을 누릅니다. getLocationOnScreen이 올바르게 갱신되지 않습니다. –

+0

getLocationOnScreen에 의존하지 않는 메소드를 찾았습니다! 대부분 당신의 메소드와 같으며, 뷰의 높이 (getHeight())가 on 레이아웃 리스너 내의 윈도우 높이와 같은지 확인합니다. 같으면 앱이 전체 화면에 있음을 나타냅니다. onConfigurationChanged를 사용하려면 windowManager.getDefaultDisplay(). getSize (windowSize);를 사용하여 windowSize.y가 액세스하는 창의 높이를 업데이트해야합니다. http://stackoverflow.com/a/34215751/2669960 –