在 Activity#onCreate() 中直接获取控件高度与宽度,因为布局的渲染是异步操作,在onCreate()生命周期中未必能渲染完成,因此导致使用 View.getWidth() 与 View.getHeight() 方法返回是0。如果硬要在 onCreate() 方法中获取控件高度与宽度,怎么办呢?
有如下三种方法:
方法一:
View view = findViewById(R.id.view); view.measure( View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) ); int mWidth = view.getMeasuredWidth(); int mHeight = view.getMeasuredHeight();方法二:
View view = findViewById(R.id.view); ViewTreeObserver viewTreeObserver = view.getViewTreeObserver(); viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { int mWidth = view.getMeasuredWidth(); int mHeight = view.getMeasuredHeight(); return true; } });方法三:
View view = findViewById(R.id.view); ViewTreeObserver viewTreeObserver = view.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { view.getViewTreeObserver().removeOnGlobalLayoutListener(this); mWidth = view.getWidth(); mHeight = view.getHeight(); } });参考:Android 在OnCreate()中获取控件高度与宽度 # https://blog.csdn.net/pp_hdsny/article/details/12012553
