2012-05-11 7 views
0

응용 프로그램을 작동 시키려면 화면 크기를 가져와야합니다. 그렇게하기 위해, 나는 주 활동에 2 개의 함수를 만들었고, 활동이 아닌 클래스의 객체를 통해 그들을 호출했다.비 액티브 클래스에서 이미지 크기 가져 오기

어떤 이유로 든 계속 충돌합니다. 왜 내가이 함수들을 호출 할 수 없습니까? 어떻게 고칠 수 있니? 주요 활동의

코드 : 비 활동

public int getWidth(){ 
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth(); 
    return width; 
} 

public int getHeight(){ 
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int height = display.getHeight(); 
    return height; 
} 

코드 (호출 부) :

main Main = new main(); 
private int height = Main.getHeight(); 
private int width = Main.getWidth(); 

내가 그 방법이 사용되지 않습니다 알고 있습니다,하지만 난이 getSize에 사용하지 못할 (포인트); 메서드는 최소 API 레벨 7을 개발하기 때문에 발생합니다.

+0

스택 추적을 y 우리의 추락. – kabuko

+0

표시 할 내용이 없으면 getHeight()의 첫 번째 줄에서 충돌합니다. 함수는 호출 된 첫 번째 함수이므로 – arielschon12

+0

우리는 비 활동 클래스의 생성자에서 컨텍스트를 전달할 수 없습니까? –

답변

1

Activity을 생성자와 함께 만들고이를 올바르게 초기화해야합니다. 그것이 작동하는 방식이 아닙니다. 생성자를 호출하면 시스템 서비스를 얻는 데 필요한 컨텍스트가 없습니다. 활동의 실제 인스턴스에서이 정보를 가져 와서이 데이터가 필요한 오브젝트로 전달해야합니다. 더 많은 정보/코드가 없으면 그보다 더 자세한 정보를 제공하는 것이 실제적이지 않습니다.

public class Constants 
{ 
    public static int DEVICE_WIDTH; 
    public static int DEVICE_HEIGHT; 
} 

활동

onCreate(...) 
{ 
    ... 
    Constants.DEVICE_WIDTH = this.getWidth(); 
    Constants.DEVICE_HEIGHT = this.getHeight(); 
} 

을 그리고 당신이 그 값을 필요로 할 때, 그것을 호출

3

당신은 당신의 Activity 등의 onCreate에 초기화 클래스 Constants 포함하는 정적 필드를 만들 수 있습니다 :

int deviceWidth = Constants.DEVICE_WIDTH; 
관련 문제