@blog.justoneplanet.info

日々勉強

androidでレンダリング後のViewのサイズを取得する

onClickなどのユーザイベント実行時に取得するならば以下の方法で取得ができる。

mView.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
        int width = v.getWidth();
        int height = v.getHeight();
    }
});

これを利用して以下のようにすると正しく取得できない。

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    int width = mView.getWidth();// 0
    int height = mView.getHeight();// 0
}

onCreate, onStart, onResumeではレンダリングが終了していないためサイズが0となる。

■解決策

以下のようにViewTreeObserverを利用することでレンダリング後のサイズを取得することができる。

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    ViewTreeObserver viewTreeObserver = mView.getViewTreeObserver();
    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int width = mView.getWidth();
            int height = mView.getHeight();
        }
    });
}

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment