产生这个问题的原因是,你获取的时候,View的绘制流程还没有结束,View 也许还没执行完 measure 阶段,那么自然获取到的宽高结果为 0。获取方式如下:
1、监听全局变化
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、通过post方式
view.post(new Runnable() {
@Override
public void run() {
int width = view.getWidth();
}
});
3、通过onWindowFocusChanged方法
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
int width= view.getWidth();
}
}