안드로이드는 사용자가 /res/* 에 dpi 별로 이미지를 넣어두면 실행시에 ResourceQualifier를 통해 사용자의 단말에 적합한 이미지를 보여주고 있다. 그래서 보통은 실제 해상도를 확인하고 이를 통해 화면에 그려주려는 생각은 좋은 아이디어가 아니다.
하지만, 때때로 단말의 실제 해상도가 필요할 때가 있는데, 이 때 아래의 코드들을 사용한다.
안드로이드의 해상도
안드로이드에서 제공하는 해상도 값은 크게 두 종류다. 하나는 개발자가 내용을 표시할 수 있는 영역의 크기(display resolution)이고, 다른 하나는 단말의 물리적 크기(native resolution)이다.
화면은 상태 바와 같은 추가적인 부분이 있기 때문에, 개발자가 그릴 수 있는 크기가 곧 단말의 물리적 크기와는 다를 수 있다.
알려진 방법들
아래의 코드는 상태 바 등을 제외한 개발자가 그릴 수 있는 영역의 크기를 반환한다.
Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight();
하지만 위에 사용된 Display.getWidth(), Display.getHeight()는 API 13부터 deprecated 되었다. 대신에, getSize(Point)라는 함수를 API 13부터 제공한다.
Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize( size ); int width = size.x; int height = size.y;
아래 코드들은 단말의 물리적 크기(native resolution)를 반환한다.
Activity 안에서는 getWindowManager()를 통해 DisplayMetrics를 쓸 수 있다.
Display display = getWindowManager().getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics( metrics ); int width = metrics.widthPixels; int height = metrics.heightPixels;
Activity가 아닌 경우는 Context에서 제공하는 getResources()를 통해 Resources 객체를 받아 DisplayMetrics를 얻을 수 있다.
DisplayMetrics metrics = this.getResources().getDisplayMetrics(); int width = metrics.widthPixels; int height = metrics.heightPixels;
참고
구글 레퍼런스 폰의 경우 소프트키 부분이 화면의 일부로 처리된다. 하지만, 안드로이드 4.4.4에서 테스트한 결과 버튼을 제외한 영역의 크기만 넘어온다.
감사합니다 큰 도움이 되었네요
도움이 되셨다니 기쁘네요 ^^
간결하게 …
잘 보았습니다.
건강하세요.