若是想在onCreate裏面獲取控件的寬和高,直接調用view.getWidth()或者view.getHeight()返回的是0,由於onCreate方法執行完了,咱們定義的控件纔會被度量(measure),因此咱們在onCreate方法裏面經過view.getHeight()獲取控件的高度或者寬度確定是0java
方法一:app
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); imageView.measure(w, h); int height =imageView.getMeasuredHeight(); int width =imageView.getMeasuredWidth();
此方法調用onMeasure方法三次ide
方法二:函數
ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); return true; } });
此方法會加載onMeasure二次,可是回調函數會回調不少次this
方法三:code
ViewTreeObserver vto2 = imageView.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth()); } });
此方法會加載onMeasure二次,可是回調函數只回調一次server