View的绘制流程
一、视图层级结构关系
1. View的层级关系
在正式分析View的绘制流程之前,我们先来了解一下View的层级视图关系。
先看一下View层级关系图:
Activity在创建的同时会创建一个Window,在这个Window中我们所看到的DecorView就是最顶层的View,而且它其实是一个FrameLayout。在Android的源码中我们可以看到DecorView是继承FrameLayout实现的。
public class DecorView extends FrameLayout implements RootViewSurfaceTaker, WindowCallbacks {
// ......
}
在这个层级视图中我们还可以看到DecorView中包含了一个LinearLayout,这个LinearLayout又包含了两个FrameLayout:
-
上面部分的是TitleBar,可以通过在AndroidManifest.xml文件中application中设置无TitleBar的theme;也可以在Activity中单独设置某个Activity的theme。
<application android:name=".xxApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:screenOrientation="portrait" android:supportsRtl="true" android:theme="@style/AppTheme">
-
下面的FrameLayout部分(
android.R.id.content
)就是我们通常编写的layout内容,从代码上直观来说的话就是我们setContentView (layoutId)
添加的布局。@Override public void setContentView(int resId) { ensureSubDecor(); ViewGroup contentParent = (ViewGroup) mSubDecor