获取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()的区别

上一篇 下一篇

猜你喜欢

热点阅读