若是想在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