获取View宽高的正确姿势

获取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(): 这是控件展示时真正的宽度(毕竟宽高不仅取决于控件本身的宽高,还有父容器的限制)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容