gpt4 book ai didi

android - 我们什么时候知道 Activity 的 View 何时被布局

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:10 26 4
gpt4 key购买 nike

我有一个具有如下 View 层次结构的 Activity:

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

顶部的 RelativeLayout 占据整个屏幕,而 LinearLayout 占据屏幕的子集。我正在尝试设置 GridLayout 的 subview 的大小,使 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);

不幸的是,mLinearLayout.getMeasuredWidth() 在创建 View 时没有返回正确的尺寸。它总是返回实际设备的屏幕宽度,直到 View 完全布局 - 在这种情况下为时已晚。我已经根据最初完全不正确的值为我的 child 提供了单元格 View 的大小。

我的问题是 - 我如何知道 View 何时已完全布局。我需要查询他们正确或实际测量的宽度/高度。

setContentView() 创建 View 并在理论上对它们进行布局。但他们的观点还不能保证在他们最终的正确位置/大小。

最佳答案

你可以给任意view添加ViewObserver,在这个observer中有一个回调方法onGlobalLayout,当Layout已经铺好时调用;

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.
}
}

关于android - 我们什么时候知道 Activity 的 View 何时被布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com