Android学习笔记之View

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习笔记之View相关的知识,希望对你有一定的参考价值。

View加载的流程之测量:rootView调用measure()→onMeasure();

measure()是final方法,表明android不想让开发者去修改measure的框架,开发者可以onMeasure方法。

来看一下measure的代码:

  • public?final?void?measure(int?widthMeasureSpec,?int?heightMeasureSpec)?{??
  • ????if?((mPrivateFlags?&?FORCE_LAYOUT)?==?FORCE_LAYOUT?||??
  • ????????????widthMeasureSpec?!=?mOldWidthMeasureSpec?||??
  • ????????????heightMeasureSpec?!=?mOldHeightMeasureSpec)?{??
  • ????????mPrivateFlags?&=?~MEASURED_DIMENSION_SET;??
  • ????????if?(ViewDebug.TRACE_HIERARCHY)?{??
  • ????????????ViewDebug.trace(this,?ViewDebug.HierarchyTraceType.ON_MEASURE);??
  • ????????}??
  • ????????onMeasure(widthMeasureSpec,?heightMeasureSpec);??
  • ????????if?((mPrivateFlags?&?MEASURED_DIMENSION_SET)?!=?MEASURED_DIMENSION_SET)?{??
  • ????????????throw?new?IllegalStateException("onMeasure()?did?not?set?the"??
  • ????????????????????+?"?measured?dimension?by?calling"??
  • ????????????????????+?"?setMeasuredDimension()");??
  • ????????}??
  • ????????mPrivateFlags?|=?LAYOUT_REQUIRED;??
  • ????}??
  • ????mOldWidthMeasureSpec?=?widthMeasureSpec;??
  • ????mOldHeightMeasureSpec?=?heightMeasureSpec;??
  • }??

    ? ?

? ?

一个界面的展示可能会涉及到很多次发measure,因为一个视图往往包含多个子视图,每个视图都需要经历一次measure过程。ViewGroup中定义了measureChildren()方法来测量子视图,下面是measureChildren():

? ?

  • protected?void?measureChildren(int?widthMeasureSpec,?int?heightMeasureSpec)?{??
  • ????final?int?size?=?mChildrenCount;??
  • ????final?View[]?children?=?mChildren;??
  • ????for?(int?i?=?0;?i?<?size;?++i)?{??
  • ????????final?View?child?=?children[i];??
  • ????????if?((child.mViewFlags?&?VISIBILITY_MASK)?!=?GONE)?{??
  • ????????????measureChild(child,?widthMeasureSpec,?heightMeasureSpec);??
  • ????????}??
  • ????}??
  • }??

? ?

View加载的第二步: onLayout,这和measure差不多,都是由rootView调用layout()→onLayout()。

? ?

? ?

以上是关于Android学习笔记之View的主要内容,如果未能解决你的问题,请参考以下文章

Android学习笔记之Intent

Android学习笔记之ContentProvider

Android学习笔记进阶16之BitmapShader

Android学习笔记之ProgressBar案例分析

Android学习笔记之Fast Json的使用

Android学习笔记之Toast详解