Android View的工作流程
Android View的工作流程主要有三大流程:
measure 流程,测量获得View所需要的宽高
layout 流程,布局决定View在屏幕中具体的位置(决定实际的宽高)
draw 流程 绘制,真正将View的内容绘制显示到屏幕中
一.activity 界面的显示结构
DecorView是每个Activity界面的根视图,DecorView是FrameLayout的子类,是PhoneWindow对象的内部类。DecorView 对象的创建是在setContentView方法第一次执行的时候创建的,DecorView里面是一个LinearLayout布局,这个是根据我们设置的主题样式来决定加入到DecorView中是哪个layout,比如说我们设置是no-title的主题,这时候PhoneWindow生成DecorView的子View的时候就会选择一个没有title的布局R.layout.screen_simple 如下:
这里也就说明了为什么我们requestWindowFeature方法要在setContentView 方法调用之前调用的原因
二. View工作流
measure 流程,测量获得View所需要的宽高
layout 流程,布局决定View在屏幕中具体的位置(决定实际的宽高)
draw 流程 绘制,真正将View的内容绘制显示到屏幕中
一.activity 界面的显示结构
DecorView是每个Activity界面的根视图,DecorView是FrameLayout的子类,是PhoneWindow对象的内部类。DecorView 对象的创建是在setContentView方法第一次执行的时候创建的,DecorView里面是一个LinearLayout布局,这个是根据我们设置的主题样式来决定加入到DecorView中是哪个layout,比如说我们设置是no-title的主题,这时候PhoneWindow生成DecorView的子View的时候就会选择一个没有title的布局R.layout.screen_simple 如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<ViewStub android:id="@+id/action_mode_bar_stub"
android:inflatedId="@+id/action_mode_bar"
android:layout="@layout/action_mode_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="?attr/actionBarTheme" />
<FrameLayout
android:id="@android:id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foregroundInsidePadding="false"
android:foregroundGravity="fill_horizontal|top"
android:foreground="?android:attr/windowContentOverlay" />
</LinearLayout>
然后通过findViewById的方式,获得id为content的FrameLayout View对象,这个就是我们平常说的contentView,setContentView就是从这里来的,
setContentView就是将我们平常写的View或者Xml布局加入到这个id为content的FrameLayout里面。其他的主题方式也是一样的。
这里也就说明了为什么我们requestWindowFeature方法要在setContentView 方法调用之前调用的原因
二. View工作流