2011년 9월 8일 목요일

Android - view, layout의 사이즈 구하기

바탕화면의 상대좌표를 이용하여 그림을 그리거나, 콤포넌트를 배치하려고 할때 화면, view, layout 의 사이즈를 알아야 하는 경우가 있다.

아래와 같이 코딩해 보지만 원하는 결과값을 얻을 수 없다.



@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main_layout);

        View layoutMainView = (View)this.findViewById(R.id.mainLayout);

        Log.w("Layout Width - ", String.valueOf(layoutMaintView.getWidht()));
        Log.w("Layout Height - ", String.valueOf(layoutMaintView.getHeight()));

    }


=========  Result =========
Layout Width - 0
Layout Height - 0




원인으로는 onCreate 함수는 화면이 그려지기 전에 호출 되는 관계로 onCreate 시 객체의 사이즈를 구할 수 없다.


따라서 onCreate가 아닌 다른 함수에 해당 코드를 작성해야 한다.
그 코드는 바로....

onWindowFocusChanged(boolean hasFocus)



@Override
public void onWindowFocusChanged(boolean hasFocus) {

        View layoutMainView = (View)this.findViewById(R.id.mainLayout);

        Log.w("Layout Width - ", String.valueOf(layoutMaintView.getWidht()));
        Log.w("Layout Height - ", String.valueOf(layoutMaintView.getHeight()));
}


위와 같이 작성하면 올바르게 사이즈를 리턴하는 것을 확인 할 수 있다.