Android 关于getWidth() 和 getMeasur
在调试代码的时候,在代码中用LayoutParams 动改变了代码的位置 页面创建完毕后 正常展示完毕后,确认控件位置已经修改.但是在页面一创建就获取View的宽高 用getWidth()和getMeasuredWidth() 得到的结果是0.....梳理下思路有可能是因为view创建和绘制结束前获取了宽高,这个时候这个时图还没有绘制完成所以宽高是0.
这个时候就用到了ViewTreeObserver 这个方法 字面意思是视图树的观察者 这个对象可以监听时图的绘制,布局,显示 :
在调试代码的时候,在代码中用LayoutParams 动改变了代码的位置 页面创建完毕后 正常展示完毕后,确认控件位置已经修改.但是在页面一创建就获取View的宽高 用getWidth()和getMeasuredWidth() 得到的结果是0.....梳理下思路有可能是因为view创建和绘制结束前获取了宽高,这个时候这个时图还没有绘制完成所以宽高是0.
这个时候就用到了ViewTreeObserver 这个方法 字面意思是视图树的观察者 这个对象可以监听时图的绘制,布局,显示 :
ViewTreeObserver viewTreeObserver =view.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}});
注意: onGlobalLayout()这个回调方法会多次执行 测量宽高结束后需要移除这个监听
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);