我有一个视图层次结构的活动,如下所示:
<RelativeLayout>
<LinearLayout>
<GridLayout />
</LinearLayout>
</RelativeLayout>
顶部的 RelativeLayout 占据了整个屏幕,而 LinearLayout 占据了屏幕的一个子集。我正在尝试设置 GridLayout 的子视图的大小,以便在 n 行和 m 列的情况下,单元格的大小与 n、m 值以及 LinearLayout 的宽度和高度直接相关。
因此,例如,我试图获取单元格的宽度和高度,如下所示:
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);
不幸的是,在创建视图时,mLLinearLayout.getMeasuredWidth() 不会返回正确的大小。它总是返回实际设备的屏幕宽度,直到视图完全布局——在这种情况下为时已晚。我已经根据最初完全不正确的值给我的孩子单元格视图的大小。
我的问题是 - 我如何知道视图何时已完全展开。我需要查询他们正确或实际测量的宽度/高度。
setContentView() 创建视图并在理论上对它们进行布局。但他们的观点还不能保证处于最终正确的位置/大小。