从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>
以上代码代比较复杂,主要做了以下几件事情。
- 从第 8 行到第110行,主要是初始化窗口的特征,是否显示标题栏,是否全屏,是否支持ActionBar浮动等等。
- 第112-187行,主要是给容器DecorView添加id为layoutResource布局的根布局。待会分析layoutResource布局。
- 第178行,通过LayoutInflater 将xml布局转换成VIEW.
- 第180行将找到的View添加到DecorView根布局当中。
- 第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之后呢???求解。
- 从setContentView方法分析Android加载布局流程
- 从setContentView方法分析Android加载布局流程
- 从setContentView方法分析Android加载布局流程
- 从setContentView分析Android加载布局的流程
- Android布局加载之setContentView源码分析
- Activity setContentView 加载布局流程
- 【Android API】setContentView流程分析
- 源码分析 setContentView() 布局加载机制
- Android setContentView 加载布局源码解析
- 从setContentView谈谈android的布局层级
- Android布局文件的加载过程分析:Activity.setContentView()源码分析
- Android加载layout, 从setContentView开始
- android视图学习---Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
- Android 4.2 SetContentView 流程分析(一)
- Android 4.2 SetContentView 流程分析(二)
- Android 4.2 SetContentView 流程分析(三)
- Android 4.2 setContentView 流程研究分析
- android源码分析——由SetContentView串起来的布局加载机制
- LINUX权限-bash: ./startup.sh: Permission denied 解决方案
- linux文件权限学习 包括 特殊权限
- 没有人是一座孤岛<丧钟为谁而鸣>
- pymssql中文显示乱码
- Linux定时任务Crontab详解
- 从setContentView方法分析Android加载布局流程
- 基于用户投票的排名算法(四):牛顿冷却定律
- 分散式用户操作手册
- sftp常用命令介绍
- A. Mr. Kitayuta's Gift
- uva1352
- Java NIO使用及原理分析(二)
- 从LayoutInflater分析XML布局解析成View的树形结构的过程
- linux下的nginx启动