<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 參考文章 [Android應用程序窗口(Activity)](http://www.hmoore.net/alex_wsc/androids/473768) [簡述Activity與Window關系](http://www.hmoore.net/alex_wsc/androidsystem/483890) [Android群英傳之Android控件結構與自定義控件詳解](http://www.hmoore.net/alex_wsc/heros/156870) ![](http://hujiaweibujidao.github.io/images/androidheros_ui.png) ![](https://img.kancloud.cn/aa/14/aa14859dd5bc6d0e1986aeaf63f6b482_1534x737.png) ### View是如何被添加到屏幕窗口上的 * 創建頂層布局容器DecroView * DecorView是一個ViewGroup容器,寄存FrameLayout,是PhoneWindow的一個實例,是所有應用程序的頂層View,在系統內部進行初始化,當DecorView初始化完成后,系統會根據應用程序的主題特性(比如線性布局或者相對布局等特性)去加載一個基礎容器(比如NoActionBar或者DarkActionBar),不同的主題,加載的基礎容器也不一樣,但是無論如何,在基礎容器里面都有一個`com.android.internal.R.id.content`的容器,它是一個FrameLayout, * 在頂層不居中加載基礎布局ViewGroup * 將ContentView添加到基礎布局中的FrameLayout中 * 開發者通過`setContentView`自己編寫的布局xml文件 經過解析之后被添加到了這樣一個FrameLayout中 ### View的繪制流程 * 繪制入口 ``` ActivityThread.handleResumeActivity -->WindowManagerImpl.addView(decorView,layoutParams) -->WindowManagerGlobal.addView() ``` * 繪制的類及方法 ``` ViewRootImpl.setView(decorView,layoutParams, parentView) -->ViewRootImpl.requestLayout()-->scheduleTraversals()-->doTraversal()-->performTraversals() ``` * 繪制三大步驟 ``` 測量:ViewRootImpl.performMeasure 布局:ViewRootImpl.performLayout 繪制:ViewRootImpl.performDraw ``` 如下圖所示 ![](https://img.kancloud.cn/e1/29/e1298492c94464099195db1ad5916bc7_1235x944.png) #### **Viewde測量**——確定DecroView的MeasureSpec * DecroView的MeasureSpec由窗口大小和自身LayoutParams決定,遵守如下規則: 1. LayoutParams.match_parent:精確模式,窗口大小 2. LayoutParams.wrap_content:最大模式,最大為窗口大小 3. 固定大小:精確模式,大小為LayoutParams的大小 #### **View的布局** * 調用view.layout確定自身的位置,即確定mLeft,mTop,mRight,mBottom的值 * 如果是ViewGroup類型,需要調用onLayout確定子View的位置
                  <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>

                              哎呀哎呀视频在线观看