我们什么时候知道 Activity 的视图何时已布局

2024-04-20

我有一个具有视图层次结构的活动,如下所示:

<RelativeLayout>
    <LinearLayout>
        <GridLayout />
    </LinearLayout>
</RelativeLayout>

顶部的RelativeLayout 占据整个屏幕,而LinearLayout 则占据屏幕的一个子集。我试图设置 GridLayout 子视图的大小,使得 n 行和 m 列的单元格大小与 LinearLayout 的 n、m 值以及宽度和高度直接相关。

例如,我试图获取单元格的宽度和高度,如下所示:

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() 创建视图并理论上对它们进行布局。但还不能保证他们的视图处于最终正确的位置/尺寸。


你可以将ViewObserver添加到任何视图中,在这个观察者中有一个回调方法onGlobalLayout,当布局被放置时调用;

ViewTreeObserver observer = view.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        //in here, place the code that requires you to know the dimensions.


         //this will be called as the layout is finished, prior to displaying.
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们什么时候知道 Activity 的视图何时已布局 的相关文章

随机推荐