2016-12-11 4 views
1

나는 내 자바 파일의 뒷부분에 정의 된 메소드를 호출하려고 해요 : 내가 디버그 모드에서 내 응용 프로그램을 실행할 때 나는 것을 볼, 그러나 ...Android Studio의 onCreate 메소드에서 Java 파일의 다른 메소드를 호출 할 수 있습니까?

public int moveHorizontal; 
public int moveVertical; 
public RelativeLayout relative1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    relative1 = (RelativeLayout) findViewById(R.id.relative1); 
    moveHorizontal = width(1f/12f); 
    moveVertical = height(1f/12f); 
} 

public int width(float fraction) { 
    float relativeWidth = relative1.getWidth(); 
    return Math.round(fraction*relativeWidth); 
} 

moveHorizontalmoveVertical 모두 0으로 설정됩니다. 나는 width(1f/12f)를 찾기 위해 코드의 나머지 부분에서 사용 해봤하고 90를 반환 같은 방법이 잘 작동 알고있다. 이 내가 onCreate 방법 내부 width 메서드를 호출 할 수 없음을 의미 하는가? 이 문제를 해결할 방법이 있습니까?

+2

디버깅을 시도 했습니까? 'relative1.getWidth()'가 예기치 않은 값을 반환 할 가능성이 더 높습니다 (아마도 아직 그려지지 않았을 것입니다). – John3136

답변

3

그렇다면 onCreate 메서드 내에서 width 메서드를 호출 할 수 없다는 의미입니까?

width()으로 전화 할 수 있습니다. 그러나 relative1.getWidth()은 레이아웃이 아직 측정 및 배치되지 않았으므로이 시점에서 0이됩니다.

그리고이 주위에 방법은 무엇입니까?

우선 문제 해결에 대한 더 나은 해결책이 있는지 확인하십시오. 여기에는 relative1 크기가 포함됩니다. 예를 들어, ConstraintLayoutLinearLayout 모두 당신이 계산을 직접 할 필요없이, 분수에 따라 크기 조정 가지를 지원합니다. 당신은 폭과 높이, wait to try using it until the widgets have been sized이 필요하다고 확신한다면

.