Android 我们什么时候知道什么时候有活动';他的观点已经被展示出来了
我有一个具有如下视图层次结构的活动:Android 我们什么时候知道什么时候有活动';他的观点已经被展示出来了,android,android-layout,android-activity,android-view,Android,Android Layout,Android Activity,Android View,我有一个具有如下视图层次结构的活动: <RelativeLayout> <LinearLayout> <GridLayout /> </LinearLayout> </RelativeLayout> int linearLayoutWidth = mLinearLayout.getMeasuredWidth(); int linearLayoutHeight = mLinearLayout.getMea
<RelativeLayout>
<LinearLayout>
<GridLayout />
</LinearLayout>
</RelativeLayout>
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.
}
}
扩展jeet的答案,您可以让您的活动实现侦听器,从而生成稍微好一点的代码
public class MyActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
view.getViewTreeObserver().addOnGlobalLayoutListener(this);
}
@Override
public void onGlobalLayout() {
...
}
}
这对我来说似乎并不不幸——这似乎是一种了解版面正在做什么的优雅方式。是的,这是一种了解版面正在做什么的优雅方式。活动的onlyointer方法将是一种更优雅的方式。