次のようなビュー階層を持つアクティビティがあります。
<RelativeLayout>
<LinearLayout>
<GridLayout />
</LinearLayout>
</RelativeLayout>
一番上の RelativeLayout は全画面を占有し、LinearLayout は画面のサブセットを占有します。n行とm列でセルのサイズがLinearLayoutのn、m値と幅と高さに直接関連するように、GridLayoutの子ビューのサイズを設定しようとしています。
たとえば、次のようにセルの幅と高さを取得しようとしています。
int linearLayoutWidth = mLinearLayout.getMeasuredWidth();
int linearLayoutHeight = mLinearLayout.getMeasuredHeight();
...
int rows = mGridModel.getRows() + 1;
int columns = mGridModel.getColumns() + 1;
int cellWidth = (int) (linearLayoutWidth / columns);
int cellHeight = (int) (linearLayoutHeight / rows);
残念ながら、mLinearLayout.getMeasuredWidth() は、ビューの作成時に正しいサイズを返しません。ビューが完全にレイアウトされるまで、常に実際のデバイスの画面幅を返します。この場合は手遅れです。最初は完全に正しくない値に基づいて、子供たちのセルビューにサイズをすでに与えています。
私の質問は、ビューが完全にレイアウトされたことをどのように知ることができるかです。正しいまたは実際に測定された幅/高さを照会する必要があります。
setContentView() はビューを作成し、理論的にレイアウトします。ただし、ビューが最終的に正しい位置/サイズになることはまだ保証されていません。