在Fragment里面使用addOnGlobalLayoutListener来动态获取布局的高度。
ViewTreeObserver vto = lay_head_bg.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { lay_head_bg.getViewTreeObserver().removeGlobalOnLayoutListener(this); lay_head_bg.post(new Runnable() { public void run() { height=lay_head_bg.getHeight(); Log.e("xiao", "height" + height); } }); } });
打印log发现得到的是0,
解决办法:
发现程序执行视图还在用户不可见状态,尝试在视图可见的时候再加载如下:
@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); //隐藏为true 显示为false if (!hidden) { ViewTreeObserver vto = lay_head_bg.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { lay_head_bg.getViewTreeObserver().removeGlobalOnLayoutListener(this); lay_head_bg.post(new Runnable() { public void run() { height=lay_head_bg.getHeight(); Log.e("qiao", "height" + height); } }); } }); } }
发现就能获得布局高度,留作记录,希望别人遇见这样问题,能快速解决。