android 화면 길이 와 너비 구현 코드 가 져 오기(손 글씨)

안 드 로 이 드 에서 화면 을 가 져 오 는 길이 가 넓 고 인터넷 에 많은 코드 가 있 지만 결 과 는 실제 와 맞지 않 습 니 다.예 를 들 어 제 핸드폰 은 i9000 이 고 화면 크기 는 480*800 px 입 니 다.얻 은 결 과 는 320*533 결과 가 믿 을 수 없어 서 스스로 몇 줄 의 코드 를 썼 습 니 다.테스트 매개 변수 직접 측정:테스트 환경:i9000(삼 성)물리 스크린:480*800 px density:1.5 테스트 코드:
 
// ( 1)
int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // ( , :480px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // ( , :800p)
Log.e(TAG + " getDefaultDisplay", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
// ( 2)
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // ( :0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // ( :120/160/240/320)
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
Log.e(TAG + " DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);
Log.e(TAG + " DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);
screenWidth = dm.widthPixels; // ( , :480px)
screenHeight = dm.heightPixels; // ( , :800px)
Log.e(TAG + " DisplayMetrics(111)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
// ( 3)
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
density = dm.density; // ( :0.75/1.0/1.5/2.0)
densityDPI = dm.densityDpi; // ( :120/160/240/320)
xdpi = dm.xdpi;
ydpi = dm.ydpi;
Log.e(TAG + " DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);
Log.e(TAG + " DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);
int screenWidthDip = dm.widthPixels; // (dip, :320dip)
int screenHeightDip = dm.heightPixels; // (dip, :533dip)
Log.e(TAG + " DisplayMetrics(222)", "screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip);
screenWidth = (int)(dm.widthPixels * density + 0.5f); // (px, :480px)
screenHeight = (int)(dm.heightPixels * density + 0.5f); // (px, :800px)
Log.e(TAG + " DisplayMetrics(222)", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
결 과 는 다음 과 같다.
 
E/== MyScreenActivity =================================== getDefaultDisplay( 8509): screenWidth=320; screenHeight=533
E/== MyScreenActivity =================================== DisplayMetrics( 8509): xdpi=156.3077; ydpi=157.51938
E/== MyScreenActivity =================================== DisplayMetrics( 8509): density=1.0; densityDPI=160
E/== MyScreenActivity =================================== DisplayMetrics(111)( 8509): screenWidth=320; screenHeight=533
E/== MyScreenActivity =================================== DisplayMetrics( 8509): xdpi=234.46153; ydpi=236.27907
E/== MyScreenActivity =================================== DisplayMetrics( 8509): density=1.5; densityDPI=240
E/== MyScreenActivity =================================== DisplayMetrics(222)( 8509): screenWidthDip=320; screenHeightDip=533
E/== MyScreenActivity =================================== DisplayMetrics(222)( 8509): screenWidth=480; screenHeight=800
분석 결과:onDraw()방법 에서 방법 1 과 2 가 일치 하고 모두 320*533 으로 테스트 기 i9000 의 화면 크기 방법 3 이 아니 라 방법 1 과 2 를 얻 은 결 과 를 density 에 곱 한 후,완벽 한 480*800,perfect!주:density 가 1 보다 큰 경우 targetSdkVersion 을 4-9 사이 에 설정 해 야 합 니 다.예 를 들 어을 설정 해 야 합 니 다.이것 은 방법 3 이 반드시 통용 되 는 것 임 을 설명 합 니까?대답 은 부정 적 이다.왜냐하면 나 도 시 뮬 레이 터,HTC G14 물리 기,그리고 ViewSonic,Galaxy 평판 에서 테스트 한 적 이 있 기 때문이다.방법 3 은 density=1.5 일 때 실제 화면 값 을 확대 했다.예 를 들 어 HTC G14 는 HTC G14 에서 실제 화면 크기 는 dm.widthPixels,dm.height Pixels 를 통 해 실제 물리 화면 크기(540,960)일반적인 방법 으로 실제 물리 스크린 크기 를 얻 지 못 하 는 이 유 는 안 드 로 이 드 시스템 의 오픈 소스 때 문 일 수 있 습 니 다.서로 다른 핸드폰 생산 업 체 가 통 일 된 제조 기준 이 없어 서 핸드폰 화면 을 규정 합 니 다.코드 를 자세히 분석 한 결과 문 제 는 코드 에 있 습 니 다.getWindowManager().getDefaultDisplay().getMetrics(dm)이 displayMetrics object from this display's data.dm=getResources().getDisplayMetrics()이 resource object 에 대한 현재 display metrics that are in effect 를 초기 화 합 니 다.returned object should be treated as read-only.

좋은 웹페이지 즐겨찾기