2013-08-03 2 views
1

Android 용 앱을 쓰고 있습니다. 디스플레이 크기에 따라 대화 상자를 그리기 위해 런타임 중에 화면 너비를 동적으로 수집하려고합니다. "display.getSize (크기);"메소드 getSize (Point)가 유형 표시에 대해 정의되지 않았습니다.

public static int getDisplayWidth(Context context) 
{ 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    int width = 0; 
    if(android.os.Build.VERSION.SDK_INT >= 13) 
    { 
     Point size = new Point(); 
     display.getSize(size); //Error 
     width = size.x; 
    } 
    else 
    { 
     width = display.getWidth(); 
    } 
    return width; 
} 

하지만 행에 오류 : 그것을 위해 나는 다음과 같은 기능을 썼다

오류 :

내가 개발 환경으로 Ecslipe를 사용하는 "방법의 getSize (포인트) 타입 디스플레이에 대한 정의입니다".

프로젝트 빌드 타겟은 "Android 2.3.3"입니다. Manifest.xml에 내가 설정했습니다 : <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />

아무도 내가 왜이 오류가 발생하는지 말해 줄 수 있습니까? 내가 잘못 했나요?

Sapp

+0

2.3.3 (API 10) 그러나 최신 18 빌드 및 2.3.3 장치에서 테스트하지 마십시오 – Selvin

+0

나는 그것을 구축 4.2.2와 그것이 작동합니다! 감사합니다 – Sapp

답변

0

이전 Android 버전에는 getSize() 메소드가 없습니다. 오류는 부재 중 함수를 호출하거나 연결하는 것입니다. 이 도움이 경우 시도 - 캐치 &와

private static Point getDisplaySize(final Display display) { 
    final Point point = new Point(); 
    try { 
     display.getSize(point); 
    } catch (java.lang.NoSuchMethodError ignore) { // Older device 
     point.x = display.getWidth(); 
     point.y = display.getHeight(); 
    } 
    return point; 
} 

실험을 참조하십시오. 이는 이전 API 인 API &으로 안전하게 대체되어야합니다. 코드가 광범위한 장치에서 작동하는지 확인하십시오.

정말 Google의 일부분입니다.

참조 :

+0

예상 예외에 대한 캐치를 시도 나쁜 코드 연습입니다 ... – Selvin

+1

작동 기능으로 대체해야하는 경우 아닙니다, @ 셀빈. 물론, 안정적인 API를 사용하면 이런 종류의 hokum이 필요하지 않습니다. 그러나 좋은 "이론"보다는 작동하는 응용 프로그램을 갖는 것이 좋습니다. –

+1

작동 기능은 다음과 같습니다. CompatHelper 인터페이스와 getDisplaySize (최종 디스플레이 표시) 메소드 ... Build.VERSION.SDK_INT를 기반으로하는 OlderHelper 및 PostHoneyHelper 및 구현 선택기의 두 가지 구현 ... 가장 높은 API로 빌드해야합니다. 그렇다면 컴파일 및 런타임 오류에 대해 걱정할 필요가 없습니다 ... 지원 lib에서 완료된 것처럼 :-) – Selvin

관련 문제