获取View宽高的正确姿势
2018-08-01 本文已影响5人
topone37
获取View的宽高正确姿势
在我们的正常开发中,我们避免不了 调用View.getWidth, View.getHeight,很多时候,我们得到的却是0 (因为很大可能:我们获取的时候,控件并没有绘制和布局完成 )
1正确知识 (很常用的姿势哦)
//通过addOnGlobalLayoutListener 获取监听事件,当控件绘制和布局完成时获取宽高
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= 16) {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}else {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
int width = view.getWidth();
}
});
2. 正确姿势
//当 view layout 处理完成时,回调UI线程时获取宽高
view.post(new Runnable() {
@Override
public void run() {
int width = view.getWidth();
}
});
3. getMeasuredWidth()与getWidth()的区别
- getMeasuredWidth(): 一个是绘制的测量出来的宽高(控件本身的宽高)
- getWidth(): 这是控件展示时真正的宽度(毕竟宽高不仅取决于控件本身的宽高,还有父容器的限制)