IT, Programming/Android

안드로이드 스테이터스 바(status bar) 높이 구하기

우주먼지 [宇宙塵, cosmic dust] 2014. 8. 28. 02:17

안드로이드 스테이터스 바(status bar) 높이 구하기

안드로이드 개발을 하다 보면 상단(태블릿의 경우 하단) 스테이터스 바(status bar)의 높이를 알아야 하는 경우가 종종 생긴다.

 

비슷한 해상도의 폰에서는 보통 같은 높이를 사용하나 제조사 별 혹은 기종 별로 약간 다를 경우도 충분히 있을 수 있다. 그래서 꼼꼼하게 UI를 구성하려면 스테이터스 바(status bar)의 높이를 고려해서 구현하는 것이 좋다.

 

또한, 앱 구현상황에 따라 비슷한 화면 구성을 가지면서도 일반 화면 모드와 풀 스크린 화면 모드를 오가야 하는 경우에도 그렇다.

 

하기와 같은 코드로 스테이터스 바(status bar)의 높이를 구할 수 있다.

   
    public int getStatusBarHeight(){
        int statusHeight = 0;
        int screenSizeType = (getAppContext().getResources().getConfiguration().screenLayout &
                Configuration.SCREENLAYOUT_SIZE_MASK);

        if(screenSizeType != Configuration.SCREENLAYOUT_SIZE_XLARGE) {
            int resourceId = getAppContext().getResources().getIdentifier("status_bar_height", "dimen", "android");

            if (resourceId > 0) {
                statusHeight = getAppContext().getResources().getDimensionPixelSize(resourceId);
            }
        }
       
        return statusHeight;
    }

스테이터스 바(status bar) 높이 구하기

  

여기서 주의할 점은 screenSizeType이 SCREENLAYOUT_SIZE_XLARGE인 경우인데, 이 경우는 해당 디바이스가 태블릿인 경우로, status bar의 높이를 0으로 리턴하도록 처리하였다.

 

나는 보통 화면의 전체 높이값을 구할 때에 DisplayMetrics의 heightPixels값으로 확인을 했는데, 특이하게도 일반 스마트폰은 heightPixels 값이 status bar를 포함한 전체 크기를 넘겨주지만, 태블릿은 status bar를 뺀 높이를 넘겨주었다.

 

그러한 이유로 태블릿의 경우에는 status값을 0으로 넘겨주도록 임의로 처리를 해 놓은 것이다. 이는 필수는 아니고 사용상의 스타일 차이이므로 필요 없을 경우에는 빼버리면 된다.