<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                看一下WindowState的構造函數: **WindowState.java::WindowState.WindowState()** ``` WindowState(WindowManagerService service, Sessions, IWindow c, WindowToken token, WindowState attachedWindow, int seq, WindowManager.LayoutParams a, intviewVisibility, final DisplayContent displayContent) { ...... // 為子窗口分配ZOrder if((mAttrs.type >= FIRST_SUB_WINDOW && mAttrs.type <= LAST_SUB_WINDOW)) { // 這里的mPolicy即是WindowManagerPolicy mBaseLayer= mPolicy.windowTypeToLayerLw( attachedWindow.mAttrs.type) * WindowManagerService.TYPE_LAYER_MULTIPLIER + WindowManagerService.TYPE_LAYER_OFFSET; mSubLayer= mPolicy.subWindowTypeToLayerLw(a.type); ...... } else {// 為普通窗口分配ZOrder mBaseLayer= mPolicy.windowTypeToLayerLw(a.type) * WindowManagerService.TYPE_LAYER_MULTIPLIER + WindowManagerService.TYPE_LAYER_OFFSET; mSubLayer= 0; ...... } ...... } ``` 窗口的顯示次序由兩個成員字段描述:主序mBaseLayer和子序mSubLayer。主序用于描述窗口及其子窗口在所有窗口中的顯示位置。而子序則描述了一個子窗口在其兄弟窗口中的顯示位置。 - 主序越大,則窗口及其子窗口的顯示位置相對于其他窗口的位置越靠前。 - 子序越大,則子窗口相對于其兄弟窗口的位置越靠前。對于父窗口而言,其主序取決于其類型,其子序則保持為0。而子窗口的主序與其父窗口一樣,子序則取決于其類型。從上述代碼可以看到,主序與子序的分配工作是由WindowManagerPolicy的兩個成員函數windowTypeToLayerLw()和subWindowTypeToLayerLw()完成的。 表4-1與表4-2列出了所有可能的窗口類型以及其主序與子序的值。 :-: 表 4-1 窗口的主序 | 窗口類型 | 主序 |窗口類型 | 主序 | | --- | --- | --- | --- | |TYPE\_UNIVERSE\_BACKGROUND | 11000 | TYPE\_WALLPAPER | 21000 | | TYPE\_PHONE | 31000 |TYPE\_SEARCH\_BAR | 41000 | | TYPE\_RECENTS\_OVERLAY |51000 | TYPE\_SYSTEM\_DIALOG | 51000 | |TYPE\_TOAST | 61000 | TYPE\_PRIORITY\_PHONE | 71000 | | TYPE\_DREAM | 81000 | TYPE\_SYSTEM\_ALERT | 91000 | |TYPE\_INPUT\_METHOD | 101000 | TYPE\_INPUT\_METHOD\_DIALOG | 111000 | | TYPE\_KEYGUARD | 121000 | TYPE\_KEYGUARD\_DIALOG | 131000 | | TYPE\_STATUS\_BAR\_SUB\_PANEL | 141000 | 應用窗口與未知類型的窗口 | 21000 | :-: 表 4-2 窗口的子序 | 子窗口類型 | 子序 | | --- | --- | | TYPE\_APPLICATION\_PANEL | 1 | | TYPE\_APPLICATION\_ATTACHED\_DIALOG | 1 | | TYPE\_APPLICATION\_MEDIA | -2 | | TYPE\_APPLICATION\_MEDIA\_OVERLAY | -1 | | TYPE\_APPLICATION\_SUB\_PANEL | 2 | >[info] **注意**: 表4-2中的MEDIA和MEDIA\_OVERLAY的子序為負值,這表明它們的顯示次序位于其父窗口的后面。這兩個類型的子窗口是SurfaceView控件創建的。SurfaceView被實例化后,會向WMS添加一個類型為MEDIA的子窗口,它的父窗口就是承載SurfaceView控件的窗口。這個子窗口的Surface將被用于視頻回放、相機預覽或游戲繪制。為了不讓這個子窗口覆蓋住所有的父窗口中承載的其他控件(如拍照按鈕,播放器控制按鈕等),它必須位于父窗口之后。 從表4-1所描述的主序與窗口類型的對應關系中可以看出,WALLPAPER類型的窗口的主序竟和APPLICATION類型的窗口主序相同,這看似有點不合常理,WALLPAPER不是應該顯示在所有Acitivity之下嗎?其實WALLPAPER類型的窗口是一個很不安分的角色,需要在所有的APPLICATION窗口之間跳來跳去。這是因為,有的Activity指定了android:windowShowWallpaper為true,則表示窗口要求將用戶當前壁紙作為其背景。對于WMS來說,最簡單的辦法就是將WALLPAPER窗口放置到緊鄰擁有這個式樣的窗口的下方。在這種需求下,為了保證主序決定窗口順序的原則,WALLPAPER使用了與APPLICATION相同的主序。另外,輸入法窗口也是一個很特殊的情況,輸入法窗口會選擇輸入目標窗口,并將自己放置于其上。在本章中不討論這兩個特殊的例子,WALLPAPER的排序規則將在第7章中進行介紹,而輸入法的排序則留給讀者自行研究。 雖然知道了窗口的主序與子序是如何分配的,不過我們仍然存有疑問:如果有兩個相同類型的窗口,那么它們的主序與子序豈不是完全相同?如何確定它們的顯示順序呢?事實上,表4-1和表4-2中所描述的主序和子序僅僅是排序的依據之一,WMS需要根據當前所有同類型窗口的數量為每個窗口計算最終的現實次序。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看