【发布时间】:2017-09-29 15:22:13
【问题描述】:
我在 OnCreate 方法中使用 ViewTreeObserver 来获取工具栏和底部布局的高度,但我仍然得到 0 高度,为什么?我是不是做错了什么?
我是这样称呼的:
ViewTreeObserver viewTreeObserver = toolbar.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout() {
// Ensure you call it only once :
toolbar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
height1 = toolbar.getMeasuredHeight();
}
});
final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.bottom);
ViewTreeObserver vto = linearLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout() {
// Ensure you call it only once :
linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
height2 = linearLayout.getMeasuredHeight();
}
});
Toast.makeText(getApplicationContext(), String.valueOf(height1) + String.valueOf(height2), Toast.LENGTH_SHORT).show();
【问题讨论】:
-
您是否尝试过 getWidth() 或 getHeight() 与处理程序?这是示例: new Handler().postDelayed( new Runnable() { @Override public void run() { height1 = toolbar.getMeasuredHeight(); height2 = linearLayout.getMeasuredHeight(); } }, 1000 );
-
我也试过这个,但没有解决方案。
-
如果布局高度为 0 怎么办?你确定布局是可见的吗?我问这个是因为我之前在我的项目中错过了这个。
-
是的,布局是可见的,我从 xml 中给出了固定高度,关闭屏幕后,我得到了布局的价值,但在活动开始时没有。
-
如果你想在屏幕关闭时获取布局高度,这意味着活动处于onPause状态。所以所有布局的高度都是0。我理解错了吗?
标签: android