본문 바로가기
안드로이드

NotificationBar와 TitleBar의 크기를 알아내는 방법

by 호군 2011. 3. 20.
반응형
참고 : http://stackoverflow.com/questions/3600713/size-of-android-notification-bar-and-title-bar



나만의 form widget을 만들기 위해서 PopupWindow를 사용을 하게되었습니다.
그런데 베터리잔량과 시간 등을 표시해주는 NotificationBar와 제목이 표시되는 TitleBar를 포함한 크기에서 (0.0)에서부터 시작하더군요.

아래 그림은 에뮬레이터 화면입니다.

1번과 2번이 각각 NotificationBar와 TitleBar입니다.(틀렸으면 댓글 달아주세요)

자 이제 본론으로 들어갑니다. 이 사이즈를 어떻게 구할 수 있을까?라는 점입니다. 제가 봤을땐 정확한 방법은 없는 것같습니다.
조사해본 결과 아래의 코드로 확인을 할 수 있다고 하는데...만약 '풀 스크린'의 경우 난감한 상황이 생기겠죠?
Display display = getWindowManager().getDefaultDisplay(); 
DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager
().getDefaultDisplay().getMetrics(metrics); 
int myHeight = 0; 
 
switch (metrics.densityDpi) { 
   
case DisplayMetrics.DENSITY_HIGH: 
       
Log.i("display", "high"); 
        myHeight
= display.getHeight() - 48; 
       
break; 
    
case DisplayMetrics.DENSITY_MEDIUM: 
       
Log.i("display", "medium/default"); 
        myHeight
= display.getHeight() - 32; 
       
break; 
    
case DisplayMetrics.DENSITY_LOW: 
       
Log.i("display", "low"); 
        myHeight
= display.getHeight() - 24; 
       
break; 
    
default: 
       
Log.i("display", "Unknown density"); 
}


화면의 density를 가져와서 그 에 따른 사이즈를 빼주는 방법을 사용하네요.
만약 풀 브라우저라면?? 그만큼 어긋나게되는 것입니다.
하지만 일단은 자신만의 앱을 만들 때, NoTitleBar 또는 FullScreen를 하거나 하지 않는 다는것을 알 수 있으니 하나의 방법이라고 생각이 드네요^^

코딩은 하지 않았지만, 이런 방법도 될 것 같군요. display.getHeight()는 스크린의 전체 높이입니다. 그럼 실제 main Layout의 Height를 알 수 있다면 빼주면 되지 않을까라는 생각이 되네요.

하지만 이 두가지 모두 저에겐 큰 도움이 되지 않는 방법이였습니다 ㅠㅠ
그래도 구글님 항상 감사합니다(__)




구글링을 하다가  Jorgesys님의 글을 가져왔습니다. status bar의 높이를 가져오는 방법이라고 합니다.
320X480 스크린 크기를 갖는 디바이스는 status bar의 높이는 25px라고 합니다.
480X800 스크린 크기를 갖는 디바이스는 status bar의 높이는 38px라고 합니다.
그래서 아래의 코드를 얻었다고 하네요.

Rect rectgle= new Rect(); 
Window window= getWindow(); 
window
.getDecorView().getWindowVisibleDisplayFrame(rectgle); 
int StatusBarHeight= rectgle.top; 
int contentViewTop=  
    window
.findViewById(Window.ID_ANDROID_CONTENT).getTop(); 
int TitleBarHeight= contentViewTop - StatusBarHeight; 
 
   
Log.i("*** Jorgesys :: ", "StatusBar Height= " + StatusBarHeight + " , TitleBar Height = " + TitleBarHeight);

그리고 이 코드는 onCreate 함수에서 사용해서는 안된다고 하네요.
부디 모두에게 좋은 결과를....
반응형