Fragment がフォアグラウンドに戻ったときに onResume が呼び出されますが、まだ表示されていることや、レイアウトが既に行われていることを保証するものではありません。フラグメントの onResume はそのアクティビティに関連付けられています。ドキュメントからの抜粋を次に示します。
onResume は、アクティビティがユーザーに表示されることを示す最良の指標ではないことに注意してください。キーガードなどのシステムウィンドウが前面にある場合があります。onWindowFocusChanged(boolean) を使用して、アクティビティがユーザーに表示されていることを確認します (たとえば、ゲームを再開するため)。
ビューのサイズを取得する最良の方法は、ViewTreeObserver.OnGlobalLayoutListenerを使用することです。レイアウトが完了すると呼び出され、そこから安全にビューのサイズを取得できます。
関心のあるビューに OnGlobalLayoutListener を登録し、レイアウトが発生したらそのサイズを取得するだけです。値を読み取ったら、リスナーの登録を解除する必要があり、それ以上の更新は気にしません。(それ以外の場合、リスナーは複数回呼び出されます。)
View v = ... ;
...
v.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
v.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
v.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
height = v.getHeight();
width = v.getWidth();
}
});
(互換性チェックに注意してください - メソッドは Jelly Bean で名前が変更されました。)