Android开发 获取View的尺寸的2个方法

前言

  总所周知,在activity启动的onCreate或者其余生命周期里去获取View的尺寸是错误的,由于颇有可能View并无初始化测量绘制完成.你这个时候获取的宽或的高不出意外就是0.因此,咱们须要等待View的绘制完成后再来测量java

第一种方法,将测量添加到View列队里

mTextView.post(new Runnable() {
            @Override
            public void run() {
                int w = mTextView.getWidth();
                int h = mTextView.getHeight();
                
            }
        });

这个方式在TextView初始化所有完成后会执行这个消息列队里的逻辑ide

第二种方法,监听View的测绘完成

mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
    new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {                                                        
            mHeaderViewHeight = mHeaderView.getHeight();
            mHeaderView.getViewTreeObserver()
                    .removeGlobalOnLayoutListener(this);
        }
});

可是须要注意的是OnGlobalLayoutListener可能会被屡次触发,所以在获得了高度以后,要将OnGlobalLayoutListener注销掉。另外mHeaderViewHeight和mHeaderView都须要写在当前java文件类(好比Activity)的成员变量中。post

或者:this

public class TestActivity extends AppCompatActivity implements ViewTreeObserver.OnGlobalLayoutListener {
    private TextView tips;
    private ImageView mTestImage;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        tips = findViewById(R.id.tips);
        tips.getViewTreeObserver().addOnGlobalLayoutListener(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

    }

    @Override
    public void onGlobalLayout() {
        mTestImage.getViewTreeObserver().removeGlobalOnLayoutListener(this);

    }
} 
相关文章
相关标签/搜索