IT_Programming/Android_Java

android:windowIsFloating 속성에 관하여

JJun ™ 2013. 7. 16. 07:56

 


 출처: http://lsit81.tistory.com/entry/androidwindowIsFloating-속성에-관하여


 

 

다이얼로그 테마에 보면 android:windowIsFloating 이 true입니다.

이 속성이 true인것과 false인 것은 다음과 같은 차이가 있습니다.


 

1. true일 경우 전체 화면, false인 경우 DecorView 범위.

 

전체화면은 말그대로 스크린 전체이며, ICS의 경우 하단의 네비게이션 (백버튼 홈버튼 있는 부분)을

포함합니다.


DecorView 범위는 일반적으로 Activity에서 setContentView 했을때 fill_parent로 그릴수 있는

화면 범위라고 생각하시면 됩니다.

만약 세로로 가운데 정렬을 한다면 약간의 좌표차이가 나게 될것이고, 하단정렬이 필요한 다이얼로그를

작성한다면 ICS 케이스를 대비해서 android:windowIsFloating을 false로 해야 합니다.

true일경우 네비게이션​에 겹치게 됩니다.


2. true일 경우 WindowManager.LayoutParams, false일 경우 루트뷰의 layout params 레이아웃 배치에

   관한 설정값이 다르다는 이야기입니다.


실제 다이얼로그 소스에는 다 WindowManager.LayoutParams 를 이용해서 배치합니다.

다이얼로그의 테마는 android:windowIsFloating가 true입니다.

단말이슈가 좀 나오게 되는 부분이기도 합니다. WindowManager.LayoutParams를 만지면서

루트뷰의 layout parmas (xml에서 마진값, fill_parent, layout_gravity 등)을 변경했을때

어떤 단말은 잘 적용되는데 어떤 단말은 또 잘 안되기도 합니다.


이리저리 만져본 결과로는 WindowManager.LayoutParams의 gravity 값에 따라 영향이 상당히 큽니다.

 

android:windowIsFloating 가 false인 경우는 루트 뷰의 layout parmas (xml에서 마진값, fill_parent, layout_gravity 등)을 변경하여 배치를 하고 단말이슈가 적습니다.

(없다고 말하기에는 제가 아는 범위도 적습니다.)
 

QuickContactBadge 같은 효과(내가 버튼을 누르면 말풍선 모양의 다이얼로그가 나옴)를

내려고 하신다면 위 내용을 참고하시는 것이 도움이 될 것이라 생각합니다.