从setContentView方法分析Android加载布局流程

来源:互联网 发布:淘宝客服是几点上班 编辑:程序博客网 时间:2024/06/07 07:51

目录(?)[+]

PS一句:当初你所逃避的问题终会在未来的某一天重新出现在你面前,因此,当你第一次遇到它时,请不要逃避。

相信很多初学者对XML布局怎么加载到Activity上并且显示在手机屏幕上很好奇吧?今天我们就从经常使用的方法

setContentView来从源码分析一下XML布局是怎么加载到当前Activity上的。

Activity#setContentView

我们知道,Activity是在onCreate方法中使用setContentView方法来加载布局的,那么它内部的源码是怎么实现的呢?

Setp 1

处于好奇,我们进入了Activity的源码,找到setContentView方法如下:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">setContentView</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> layoutResID) {        getWindow().setContentView(layoutResID);        initWindowDecorActionBar();    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

setContentView方法实现很简单,里面调用两个方法,我们这里分析第一个方法:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">getWindow()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.setContentView</span>(layoutResID)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

getWindow()得到一个Window对象 mWindow ,Window是一个抽象类,用来描述Activity视图最顶端的窗口显示和行为操作。Window是

一个抽象类,那么里面的setContentView(layoutResID)是一个抽象方法,并没有具体的实现,既然Window是一个抽象类,那么

在Activity里面就有一个Window抽象类的实现,我们查找代码发现 mWindow对象赋值方法如下:

<code class="hljs fix has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-attribute" style="box-sizing: border-box;">mWindow </span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;"> PolicyManager.makeNewWindow(this);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

Step 2

Look the fuck resoure code,继续看看 PolicyManager类

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">More</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">PolicyManager</span> {</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> String POLICY_IMPL_CLASS_NAME =<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">31</span>        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.android.internal.policy.impl.Policy"</span>;<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">33</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> IPolicy sPolicy;<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">34</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">35</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">36</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Pull in the actual implementation of the policy at run-time</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">37</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">38</span>            Class policyClass = Class.forName(POLICY_IMPL_CLASS_NAME);<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">39</span>            sPolicy = (IPolicy)policyClass.newInstance();<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40</span>        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (ClassNotFoundException ex) {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">41</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">throw</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RuntimeException(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">42</span>                    POLICY_IMPL_CLASS_NAME + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" could not be loaded"</span>, ex);<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">43</span>        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (InstantiationException ex) {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">44</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">throw</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RuntimeException(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">45</span>                    POLICY_IMPL_CLASS_NAME + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" could not be instantiated"</span>, ex);<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">46</span>        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (IllegalAccessException ex) {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">47</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">throw</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RuntimeException(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">48</span>                    POLICY_IMPL_CLASS_NAME + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" could not be instantiated"</span>, ex);<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">49</span>        }<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">50</span>    }<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">51</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">52</span>    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Cannot instantiate this class</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">53</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> More <span class="hljs-title" style="box-sizing: border-box;">PolicyManager</span>() {}<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">54</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">55</span>    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// The static methods to spawn new policy-specific objects</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">56</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Window More <span class="hljs-title" style="box-sizing: border-box;">makeNewWindow</span>(Context context) {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">57</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> sPolicy.makeNewWindow(context);<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">58</span>    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li></ul>

地 57 行 sPolicy对象是有第 38,39行通过类路径”com.android.internal.policy.impl.Policy“生成的,那么我们在源码中找到 Policy类,在此类中找到了如下方法:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Window <span class="hljs-title" style="box-sizing: border-box;">makeNewWindow</span>(Context context) {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> PhoneWindow(context);    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

由此可见,我们终于找到Activity类中的 mWindow对象的实现类了,就是PhoneWindow类。

Setp 3

从源码发现,PhoneWindow类就是抽象类Window的实现类。那么 setContentView方法的实现也在这个类里面了,

到PhoneWindow类发现,setContentView方法实现如下:

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">setContentView</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> layoutResID) {        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// decor, when theme attributes and the like are crystalized. Do not check the feature</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// before this happens.</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mContentParent == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {            installDecor();        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {            mContentParent.removeAllViews();        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,                    getContext());            transitionTo(newScene);        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {            mLayoutInflater.inflate(layoutResID, mContentParent);        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> Callback cb = getCallback();        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (cb != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> && !isDestroyed()) {            cb.onContentChanged();        }    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>

首先判断mContentParent是否为null,mContentParent是什么呢?接下来会分析,一开始条件成立,进入installDecor()方法。

Setp 4

到installDecor()方法里,实现如下:

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">installDecor</span>() {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mDecor == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {            mDecor = generateDecor();            mDecor.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);            mDecor.setIsRootNamespace(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!mInvalidatePanelMenuPosted && mInvalidatePanelMenuFeatures != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                mDecor.postOnAnimation(mInvalidatePanelMenuRunnable);            }        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mContentParent == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {            mContentParent = generateLayout(mDecor);            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Set up decor part of UI to ignore fitsSystemWindows if appropriate.</span>            mDecor.makeOptionalFitsSystemWindows();            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> DecorContentParent decorContentParent = (DecorContentParent) mDecor.findViewById(                    R.id.decor_content_parent);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (decorContentParent != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                mDecorContentParent = decorContentParent;                mDecorContentParent.setWindowCallback(getCallback());                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mDecorContentParent.getTitle() == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                    mDecorContentParent.setWindowTitle(mTitle);                }                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> localFeatures = getLocalFeatures();                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < FEATURE_MAX; i++) {                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((localFeatures & (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> << i)) != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                        mDecorContentParent.initFeature(i);                    }                }                mDecorContentParent.setUiOptions(mUiOptions);                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((mResourcesSetFlags & FLAG_RESOURCE_SET_ICON) != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> ||                        (mIconRes != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> && !mDecorContentParent.hasIcon())) {                    mDecorContentParent.setIcon(mIconRes);                } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((mResourcesSetFlags & FLAG_RESOURCE_SET_ICON) == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> &&                        mIconRes == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> && !mDecorContentParent.hasIcon()) {                    mDecorContentParent.setIcon(                            getContext().getPackageManager().getDefaultActivityIcon());                    mResourcesSetFlags |= FLAG_RESOURCE_SET_ICON_FALLBACK;                }                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((mResourcesSetFlags & FLAG_RESOURCE_SET_LOGO) != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> ||                        (mLogoRes != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> && !mDecorContentParent.hasLogo())) {                    mDecorContentParent.setLogo(mLogoRes);                }                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Invalidate if the panel menu hasn't been created before this.</span>                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Panel menu invalidation is deferred avoiding application onCreateOptionsMenu</span>                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// being called in the middle of onCreate or similar.</span>                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// A pending invalidation will typically be resolved before the posted message</span>                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// would run normally in order to satisfy instance state restoration.</span>                PanelFeatureState st = getPanelState(FEATURE_OPTIONS_PANEL, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>);                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!isDestroyed() && (st == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> || st.menu == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>)) {                    invalidatePanelMenu(FEATURE_ACTION_BAR);                }            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                mTitleView = (TextView)findViewById(R.id.title);                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mTitleView != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                    mTitleView.setLayoutDirection(mDecor.getLayoutDirection());                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((getLocalFeatures() & (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> << FEATURE_NO_TITLE)) != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                        View titleContainer = findViewById(                                R.id.title_container);                        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (titleContainer != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                            titleContainer.setVisibility(View.GONE);                        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                            mTitleView.setVisibility(View.GONE);                        }                        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mContentParent <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">instanceof</span> FrameLayout) {                            ((FrameLayout)mContentParent).setForeground(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>);                        }                    } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                        mTitleView.setText(mTitle);                    }                }            }            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mDecor.getBackground() == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> && mBackgroundFallbackResource != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                mDecor.setBackgroundFallback(mBackgroundFallbackResource);            }            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Only inflate or create a new TransitionManager if the caller hasn't</span>            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// already set a custom one.</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (hasFeature(FEATURE_ACTIVITY_TRANSITIONS)) {                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mTransitionManager == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> transitionRes = getWindowStyle().getResourceId(                            R.styleable.Window_windowContentTransitionManager,                            <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (transitionRes != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> TransitionInflater inflater = TransitionInflater.from(getContext());                        mTransitionManager = inflater.inflateTransitionManager(transitionRes,                                mContentParent);                    } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                        mTransitionManager = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> TransitionManager();                    }                }                mEnterTransition = getTransition(mEnterTransition, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>,                        R.styleable.Window_windowEnterTransition);                mReturnTransition = getTransition(mReturnTransition, USE_DEFAULT_TRANSITION,                        R.styleable.Window_windowReturnTransition);                mExitTransition = getTransition(mExitTransition, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>,                        R.styleable.Window_windowExitTransition);                mReenterTransition = getTransition(mReenterTransition, USE_DEFAULT_TRANSITION,                        R.styleable.Window_windowReenterTransition);                mSharedElementEnterTransition = getTransition(mSharedElementEnterTransition, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>,                        R.styleable.Window_windowSharedElementEnterTransition);                mSharedElementReturnTransition = getTransition(mSharedElementReturnTransition,                        USE_DEFAULT_TRANSITION,                        R.styleable.Window_windowSharedElementReturnTransition);                mSharedElementExitTransition = getTransition(mSharedElementExitTransition, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>,                        R.styleable.Window_windowSharedElementExitTransition);                mSharedElementReenterTransition = getTransition(mSharedElementReenterTransition,                        USE_DEFAULT_TRANSITION,                        R.styleable.Window_windowSharedElementReenterTransition);                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mAllowEnterTransitionOverlap == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                    mAllowEnterTransitionOverlap = getWindowStyle().getBoolean(                            R.styleable.Window_windowAllowEnterTransitionOverlap, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>);                }                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mAllowReturnTransitionOverlap == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                    mAllowReturnTransitionOverlap = getWindowStyle().getBoolean(                            R.styleable.Window_windowAllowReturnTransitionOverlap, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>);                }                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mBackgroundFadeDurationMillis < <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                    mBackgroundFadeDurationMillis = getWindowStyle().getInteger(                            R.styleable.Window_windowTransitionBackgroundFadeDuration,                            DEFAULT_BACKGROUND_FADE_DURATION_MS);                }                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mSharedElementsUseOverlay == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {                    mSharedElementsUseOverlay = getWindowStyle().getBoolean(                            R.styleable.Window_windowSharedElementsUseOverlay, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>);                }            }        }    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li></ul>

在代码的第 3 行我们看到 mDecor = generateDecor();方法调用,继续跳进 generateDecor()方法:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> DecorView <span class="hljs-title" style="box-sizing: border-box;">generateDecor</span>() {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> DecorView(getContext(), -<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

这里生成一个DecorView对象,DecorView是PhoneWindow类的内部类,继承自FrameLayout。到目前为止,setContentView

方法里生成一个FrameLayout类型的DecorView组件。

Step 5

继续分析代码,看第 11 行:

<code class="hljs fix has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-attribute" style="box-sizing: border-box;"> mContentParent </span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;"> generateLayout(mDecor);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

把 DecorView 对象 mDecor 作为参数传递给 generateLayout方法得到 mContentParent。generateLayout()方法中的代码实现如下:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> ViewGroup generateLayout(DecorView decor) {        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Apply data from current theme.</span>        TypedArray a <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> getWindowStyle();        <span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-attribute" style="box-sizing: border-box;">...</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**以下这些是Activity 窗口属性特征的设置*/</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//窗口是否浮动,一般用于Dialog窗口是否浮动:是否显示在布局的正中间。</span>        mIsFloating <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowIsFloating, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>);        int flagsToUpdate <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> (FLAG_LAYOUT_IN_SCREEN<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">|</span>FLAG_LAYOUT_INSET_DECOR)                <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (~getForcedWindowFlags());        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mIsFloating) {            setLayout(WRAP_CONTENT, WRAP_CONTENT);            setFlags(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, flagsToUpdate);        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {            setFlags(FLAG_LAYOUT_IN_SCREEN<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">|</span>FLAG_LAYOUT_INSET_DECOR, flagsToUpdate);        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置窗口是否支持标题栏,隐藏显示标题栏操作在此处。</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowNoTitle, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)) {            requestFeature(FEATURE_NO_TITLE);        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowActionBar, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)) {            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Don't allow an action bar if there is no title.</span>            requestFeature(FEATURE_ACTION_BAR);        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//ActionBar导航栏是否不占布局空间叠加显示在当前窗口之上。</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowActionBarOverlay, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)) {            requestFeature(FEATURE_ACTION_BAR_OVERLAY);        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowActionModeOverlay, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)) {            requestFeature(FEATURE_ACTION_MODE_OVERLAY);        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowSwipeToDismiss, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)) {            requestFeature(FEATURE_SWIPE_TO_DISMISS);        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//当前Activity是否支持全屏</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowFullscreen, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)) {            setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (~getForcedWindowFlags()));        }       <span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-attribute" style="box-sizing: border-box;">...</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置状态栏的颜色</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>mForcedStatusBarColor) {            mStatusBarColor <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getColor(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_statusBarColor, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xFF000000</span>);        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置导航栏的颜色</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>mForcedNavigationBarColor) {            mNavigationBarColor <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getColor(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_navigationBarColor, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xFF000000</span>);        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mAlwaysReadCloseOnTouchAttr <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">||</span> getContext()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getApplicationInfo()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>targetSdkVersion                <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">>=</span> android<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>os<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Build<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>VERSION_CODES<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>HONEYCOMB) {            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(                    R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowCloseOnTouchOutside,                    <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)) {                setCloseOnTouchOutsideIfNotSet(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>);            }        }        WindowManager<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>LayoutParams <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> getAttributes();        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置输入法的状态</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>hasSoftInputMode()) {            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>softInputMode <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getInt(                    R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowSoftInputMode,                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>softInputMode);        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_backgroundDimEnabled,                mIsFloating)) {            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/* All dialogs should have the window dimmed */</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((getForcedWindowFlags()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span>WindowManager<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>LayoutParams<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>FLAG_DIM_BEHIND) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>flags <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">|=</span> WindowManager<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>LayoutParams<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>FLAG_DIM_BEHIND;            }            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>haveDimAmount()) {                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>dimAmount <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getFloat(                        android<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_backgroundDimAmount, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.5</span>f);            }        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置当前Activity的出现动画效果</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>windowAnimations <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>windowAnimations <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getResourceId(                    R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowAnimationStyle, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// The rest are only done if this window is not embedded; otherwise,</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// the values are inherited from our container.</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (getContainer() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>) {            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mBackgroundDrawable <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>) {                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mBackgroundResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                    mBackgroundResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getResourceId(                            R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowBackground, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);                }                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mFrameResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                    mFrameResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getResourceId(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowFrame, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);                }                mBackgroundFallbackResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getResourceId(                        R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowBackgroundFallback, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>) {                    System<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>out<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Background: "</span>                            <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Integer</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>toHexString(mBackgroundResource) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" Frame: "</span>                            <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">Integer</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>toHexString(mFrameResource));                }            }            mElevation <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getDimension(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowElevation, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);            mClipToOutline <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getBoolean(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowClipToOutline, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>);            mTextColor <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getColor(R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_textColor, Color<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>TRANSPARENT);        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//以下代码为当前Activity窗口添加 decor根布局。</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Inflate the window decor.</span>        int layoutResource;        int features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> getLocalFeatures();        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// System.out.println("Features: 0x" + Integer.toHexString(features));</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_SWIPE_TO_DISMISS)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_swipe_dismiss;        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> ((<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_LEFT_ICON) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">|</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_RIGHT_ICON))) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mIsFloating) {                TypedValue res <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> TypedValue();                getContext()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getTheme()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>resolveAttribute(                        R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>attr<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>dialogTitleIconsDecorLayout, res, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>);                layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> res<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>resourceId;            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_title_icons;            }            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// XXX Remove this once action bar supports these features.</span>            removeFeature(FEATURE_ACTION_BAR);            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// System.out.println("Title Icons!");</span>        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> ((<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_PROGRESS) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">|</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_INDETERMINATE_PROGRESS))) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>                <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&&</span> (features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_ACTION_BAR)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Special case for a window with only a progress bar (and title).</span>            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// XXX Need to have a no-title version of embedded windows.</span>            layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_progress;            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// System.out.println("Progress!");</span>        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_CUSTOM_TITLE)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Special case for a window with a custom title.</span>            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// If the window is floating, we need a dialog layout</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mIsFloating) {                TypedValue res <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> TypedValue();                getContext()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getTheme()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>resolveAttribute(                        R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>attr<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>dialogCustomTitleDecorLayout, res, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>);                layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> res<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>resourceId;            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_custom_title;            }            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// XXX Remove this once action bar supports these features.</span>            removeFeature(FEATURE_ACTION_BAR);        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_NO_TITLE)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// If no other features and not embedded, only need a title.</span>            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// If the window is floating, we need a dialog layout</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mIsFloating) {                TypedValue res <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> TypedValue();                getContext()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getTheme()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>resolveAttribute(                        R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>attr<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>dialogTitleDecorLayout, res, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>);                layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> res<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>resourceId;            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_ACTION_BAR)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> a<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getResourceId(                        R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>styleable<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>Window_windowActionBarFullscreenDecorLayout,                        R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_action_bar);            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_title;            }            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// System.out.println("Title!");</span>        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_ACTION_MODE_OVERLAY)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_simple_overlay_action_mode;        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Embedded, so no decoration is needed.</span>            layoutResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> R<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>layout<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>screen_simple;            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// System.out.println("Simple!");</span>        }        mDecor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>startChanging();        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//通过布局添加器LayoutInflater获取layoutResource布局,</span>        View <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> mLayoutInflater<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>inflate(layoutResource, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>);        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//将XML资源为layoutResource的布局添加到decor容器里面,至此PhoneWindow 内部类DecorView就添加了之布局</span>        decor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>addView(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span>, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> ViewGroup<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>LayoutParams(MATCH_PARENT, MATCH_PARENT));        mContentRoot <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> (ViewGroup) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span>;        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//此处很重要,通过findViewById找到 contentParent容器,也是该方法的返回值。</span>        ViewGroup contentParent <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> (ViewGroup)findViewById(ID_ANDROID_CONTENT);        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (contentParent <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>) {            throw <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> RuntimeException(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Window couldn't find content container view"</span>);        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_INDETERMINATE_PROGRESS)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            ProgressBar progress <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> getCircularProgressBar(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (progress <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>) {                progress<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setIndeterminate(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>);            }        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((features <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span> FEATURE_SWIPE_TO_DISMISS)) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {            registerSwipeCallbacks();        }        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Remaining setup -- of background and title -- that only applies</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// to top-level windows.</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//以下代码设置Activity窗口的背景,标题等</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (getContainer() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>) {            final Drawable background;            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mBackgroundResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                background <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> getContext()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getDrawable(mBackgroundResource);            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                background <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> mBackgroundDrawable;            }            mDecor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setWindowBackground(background);            final Drawable frame;            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mFrameResource <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                frame <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> getContext()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getDrawable(mFrameResource);            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {                frame <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>;            }            mDecor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setWindowFrame(frame);            mDecor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setElevation(mElevation);            mDecor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>setClipToOutline(mClipToOutline);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mTitle <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span>) {                setTitle(mTitle);            }            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mTitleColor <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {                mTitleColor <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> mTextColor;            }            setTitleColor(mTitleColor);        }        mDecor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>finishChanging();        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> contentParent;    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li><li style="box-sizing: border-box; padding: 0px 5px;">156</li><li style="box-sizing: border-box; padding: 0px 5px;">157</li><li style="box-sizing: border-box; padding: 0px 5px;">158</li><li style="box-sizing: border-box; padding: 0px 5px;">159</li><li style="box-sizing: border-box; padding: 0px 5px;">160</li><li style="box-sizing: border-box; padding: 0px 5px;">161</li><li style="box-sizing: border-box; padding: 0px 5px;">162</li><li style="box-sizing: border-box; padding: 0px 5px;">163</li><li style="box-sizing: border-box; padding: 0px 5px;">164</li><li style="box-sizing: border-box; padding: 0px 5px;">165</li><li style="box-sizing: border-box; padding: 0px 5px;">166</li><li style="box-sizing: border-box; padding: 0px 5px;">167</li><li style="box-sizing: border-box; padding: 0px 5px;">168</li><li style="box-sizing: border-box; padding: 0px 5px;">169</li><li style="box-sizing: border-box; padding: 0px 5px;">170</li><li style="box-sizing: border-box; padding: 0px 5px;">171</li><li style="box-sizing: border-box; padding: 0px 5px;">172</li><li style="box-sizing: border-box; padding: 0px 5px;">173</li><li style="box-sizing: border-box; padding: 0px 5px;">174</li><li style="box-sizing: border-box; padding: 0px 5px;">175</li><li style="box-sizing: border-box; padding: 0px 5px;">176</li><li style="box-sizing: border-box; padding: 0px 5px;">177</li><li style="box-sizing: border-box; padding: 0px 5px;">178</li><li style="box-sizing: border-box; padding: 0px 5px;">179</li><li style="box-sizing: border-box; padding: 0px 5px;">180</li><li style="box-sizing: border-box; padding: 0px 5px;">181</li><li style="box-sizing: border-box; padding: 0px 5px;">182</li><li style="box-sizing: border-box; padding: 0px 5px;">183</li><li style="box-sizing: border-box; padding: 0px 5px;">184</li><li style="box-sizing: border-box; padding: 0px 5px;">185</li><li style="box-sizing: border-box; padding: 0px 5px;">186</li><li style="box-sizing: border-box; padding: 0px 5px;">187</li><li style="box-sizing: border-box; padding: 0px 5px;">188</li><li style="box-sizing: border-box; padding: 0px 5px;">189</li><li style="box-sizing: border-box; padding: 0px 5px;">190</li><li style="box-sizing: border-box; padding: 0px 5px;">191</li><li style="box-sizing: border-box; padding: 0px 5px;">192</li><li style="box-sizing: border-box; padding: 0px 5px;">193</li><li style="box-sizing: border-box; padding: 0px 5px;">194</li><li style="box-sizing: border-box; padding: 0px 5px;">195</li><li style="box-sizing: border-box; padding: 0px 5px;">196</li><li style="box-sizing: border-box; padding: 0px 5px;">197</li><li style="box-sizing: border-box; padding: 0px 5px;">198</li><li style="box-sizing: border-box; padding: 0px 5px;">199</li><li style="box-sizing: border-box; padding: 0px 5px;">200</li><li style="box-sizing: border-box; padding: 0px 5px;">201</li><li style="box-sizing: border-box; padding: 0px 5px;">202</li><li style="box-sizing: border-box; padding: 0px 5px;">203</li><li style="box-sizing: border-box; padding: 0px 5px;">204</li><li style="box-sizing: border-box; padding: 0px 5px;">205</li><li style="box-sizing: border-box; padding: 0px 5px;">206</li><li style="box-sizing: border-box; padding: 0px 5px;">207</li><li style="box-sizing: border-box; padding: 0px 5px;">208</li><li style="box-sizing: border-box; padding: 0px 5px;">209</li><li style="box-sizing: border-box; padding: 0px 5px;">210</li><li style="box-sizing: border-box; padding: 0px 5px;">211</li><li style="box-sizing: border-box; padding: 0px 5px;">212</li><li style="box-sizing: border-box; padding: 0px 5px;">213</li><li style="box-sizing: border-box; padding: 0px 5px;">214</li><li style="box-sizing: border-box; padding: 0px 5px;">215</li><li style="box-sizing: border-box; padding: 0px 5px;">216</li><li style="box-sizing: border-box; padding: 0px 5px;">217</li><li style="box-sizing: border-box; padding: 0px 5px;">218</li><li style="box-sizing: border-box; padding: 0px 5px;">219</li><li style="box-sizing: border-box; padding: 0px 5px;">220</li><li style="box-sizing: border-box; padding: 0px 5px;">221</li><li style="box-sizing: border-box; padding: 0px 5px;">222</li><li style="box-sizing: border-box; padding: 0px 5px;">223</li><li style="box-sizing: border-box; padding: 0px 5px;">224</li><li style="box-sizing: border-box; padding: 0px 5px;">225</li><li style="box-sizing: border-box; padding: 0px 5px;">226</li><li style="box-sizing: border-box; padding: 0px 5px;">227</li><li style="box-sizing: border-box; padding: 0px 5px;">228</li><li style="box-sizing: border-box; padding: 0px 5px;">229</li><li style="box-sizing: border-box; padding: 0px 5px;">230</li><li style="box-sizing: border-box; padding: 0px 5px;">231</li><li style="box-sizing: border-box; padding: 0px 5px;">232</li><li style="box-sizing: border-box; padding: 0px 5px;">233</li><li style="box-sizing: border-box; padding: 0px 5px;">234</li><li style="box-sizing: border-box; padding: 0px 5px;">235</li><li style="box-sizing: border-box; padding: 0px 5px;">236</li></ul>

以上代码代比较复杂,主要做了以下几件事情。

  1. 从第 8 行到第110行,主要是初始化窗口的特征,是否显示标题栏,是否全屏,是否支持ActionBar浮动等等。
  2. 第112-187行,主要是给容器DecorView添加id为layoutResource布局的根布局。待会分析layoutResource布局。
  3. 第178行,通过LayoutInflater 将xml布局转换成VIEW.
  4. 第180行将找到的View添加到DecorView根布局当中。
  5. 第184行,从根布局中找到id为R.id.content的 contentParent 容器。也就是当前方法的返回值。 
    接下来,看看 id为layoutResource的布局到底实现了什么?我们来看看171行的R.layout.screen_simple;资源
<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">LinearLayout</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">xmlns:android</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"http://schemas.android.com/apk/res/android"</span>    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:layout_width</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"match_parent"</span>    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:layout_height</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"match_parent"</span>    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:fitsSystemWindows</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"true"</span>    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:orientation</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"vertical"</span>></span>    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">ViewStub</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:id</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"@+id/action_mode_bar_stub"</span>              <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:inflatedId</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"@+id/action_mode_bar"</span>              <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:layout</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"@layout/action_mode_bar"</span>              <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:layout_width</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"match_parent"</span>              <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:layout_height</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"wrap_content"</span>              <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:theme</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"?attr/actionBarTheme"</span> /></span>    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">FrameLayout</span>         <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:id</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"@android:id/content"</span>         <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:layout_width</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"match_parent"</span>         <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:layout_height</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"match_parent"</span>         <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:foregroundInsidePadding</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"false"</span>         <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:foregroundGravity</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"fill_horizontal|top"</span>         <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:foreground</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"?android:attr/windowContentOverlay"</span> /></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">LinearLayout</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li></ul>

原来我们的DecorView根布局里面添加了类似上面的布局,线性布局LinearLaout里包含两个组件,ViewStub是懒加载,默认不显示,FrameLayout是什么呢?看看id=content,就是我们184行找到的父容器 contentParent。那么这个父容器 contentParent有什么作用呢?

我们回到 Step4 的第 11行,mContentParent = generateLayout(mDecor); 获得 父容器 mContentParent。我们再次回到 Step3步的第17行, mLayoutInflater.inflate(layoutResID, mContentParent); 这里通过LayoutInflater将 setContentView(layoutResID)传进来的布局id加载到 父容器mContentParent中,至此,setContentView就将布局添加到Activity里面了。

现在我们来梳理一下流程: 
Activity setContentView—>Window setContentView—>PhoneWindow setContentView—->PhoneWindow installDecor—–>PhoneWindow generateLayout——>PhoneWindow mLayoutInflater.inflate(layoutResID, mContentParent);

Activity 类中有一个Window抽象类的实现PhoneWindow类,该类中有个内部类DecorView,继承自FrameLayout,在DecorView容器中添加了根布局,根布局中包含了一个id为 contnet的FrameLayout 内容布局,我们的Activity加载的布局xml最后添加到 id为content的FrameLayout布局当中了。用一个图来描述,如下:

这里写图片描述

总结:

1.关于requestWindowFeature(Window.FEATURE_NO_TITLE); 去除标题栏的疑问,如果你自己的xxxActivity是继承自Activity,那么恭喜你使用以上方法可以去除标题栏,如果你自己的xxxActivity是继承自AppCompatActivity或者ActionBarActivity,那么很遗憾告诉你,此次系统默认的标题栏已经在主题中去除,此时显示的标题栏是ActionBar导航栏,如果需要去除导航栏,你可以通过如下代码:getSupportActionBar().hide();来隐藏导航栏。

2.requestWindowFeature(Window.FEATURE_NO_TITLE);方法需要在 setContentView方法之前使用,由上面 Step5分析可得,设置Activity Window 特征是在setContentView方法中设置的,因此,如果需要改变Activity Window窗口特征,需要在setContentView方法之前。其实这里有疑问???为什么设置全屏的方法

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">getWindow()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.setFlags</span>(WindowManager<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.LayoutParams</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.FLAG</span>_FULLSCREEN, WindowManager<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.LayoutParams</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.FLAG</span>_FULLSCREEN)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

可以在setContentView之后呢???求解。

0 0
原创粉丝点击