마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

화면 크기 구하는 방법.. (네비게이션 바, 상태표시줄 제외하고)

0 추천

화면 전체 크기를 구하고 싶은데요..

휴대폰 기종마다 네이게이션 바가 화면 크기에 포함되는 게 있고 안되는 게 있더라구요..

 

	    DisplayMetrics dm = new DisplayMetrics();
	    ctx.getWindowManager().getDefaultDisplay().getMetrics(dm);
	    return dm.heightPixels;

이렇게 구하니까.. 홈키가 화면에 포함된 휴대폰인 경우.. 홈 키 영역까지 다 합쳐서 크기를 구하더라구요.

결국 화면에 딱 맞지 않고 홈 키 높이만큼 더 커져서 나오던데요..

 

 

boolean isLandScape = ctx.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
		
		int statusHeightId = ctx.getResources().getIdentifier("status_bar_height", "dimen", "android");
		int statusHeight = 0;
		if(statusHeightId > 0){
			statusHeight = ctx.getResources().getDimensionPixelSize(statusHeightId);
		}

		int naviHeightId = ctx.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); //landScape에서는 navigation_bar_height_landscape
		int naviHeight = 0;
		if (naviHeightId > 0) {
			naviHeight = ctx.getResources().getDimensionPixelSize(naviHeightId);
		}
		
		int wholeSize = getDisplaySize(wm, false); 
		
		wholeSize -= statusHeight;
		
		if(isLandScape == false){
			wholeSize -= naviHeight;
		}
		
		return wholeSize;

 

그 다음 이 방법으로 해 봤는데 -_- .. 이것도 별로 차이가 없는 건지.. 

일반 휴대폰에서는 별 문제가 없는데, 스테이터스 바(상태표시줄)랑 네비게이션 바(홈키)가 같이 있는 태블릿에서 높이를 이상하게 구하는 거 같더라고요..

 

 

 Rect rectangle = new Rect();
 Window window = activity.getWindow();
 window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
 int statusBarTop = rectangle.top;
 int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
 int statusbarHeight = Math.abs(statusBarTop - contentViewTop);

그 다음으로 시도해본 건 이 방법인데..

이건 OnGlobalLayoutListener로 업데이트 안해주니까... 값이 입력이 안되더라고요.

 

하 -_- 방법 없을까요.. 

익명사용자 님이 2016년 3월 30일 질문

1개의 답변

0 추천

.... 

public Point getDisplayDimensions(Context context) {

    Point size = new Point();
    WindowManager w = ((Activity) context).getWindowManager();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        w.getDefaultDisplay().getSize(size);
    } else {
        Display d = w.getDefaultDisplay();
        size.x = d.getWidth();
        size.y = d.getHeight();
    }
    return size;
}
 
size.x = width
size.y = height 
은평구멍멍이 (2,630 포인트) 님이 2016년 3월 30일 답변
제가 이 질문글 올릴 때 너무 정신이 없어서 ㅠㅠ 그냥 넘겨버렸는데
제가 올린 소스 중 getDisplaySize() << 이 메소드가 답변해 주신 메소드랑 같은 메소드였습니다.

일단은 세번째 방법이랑 비슷하게 해서 문제 해결은 했어요 ㅠ
...