Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Gui系統之View體系(2)---View的setContent,---viewsetcontent

Gui系統之View體系(2)---View的setContent,---viewsetcontent

編輯:關於android開發

Gui系統之View體系(2)---View的setContent,---viewsetcontent


1.從SetContentView講起

1.1Activty的setContentView裡面的內容

    public void setContentView(@LayoutRes int layoutResID) {
        getWindow().setContentView(layoutResID);
        initWindowDecorActionBar();
    }

首先這個getWindow是什麼?

mWindow, 作用:

mWindow = new PhoneWindow(this);

在attach@ativity 方法裡面定義的。默認就是PhoneWindow.也就是Activity裡面包含的window實例。

@Override public void setContentView(int layoutResID) { // Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window // decor, when theme attributes and the like are crystalized. Do not check the feature // before this happens. if (mContentParent == null) { installDecor(); } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) { mContentParent.removeAllViews(); } if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) { final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID, getContext()); transitionTo(newScene); } else { mLayoutInflater.inflate(layoutResID, mContentParent); } mContentParent.requestApplyInsets(); final Callback cb = getCallback(); if (cb != null && !isDestroyed()) { cb.onContentChanged(); } } setContentView

mContentParent 是什麼,可以看定義:

// This is the view in which the window contents are placed. It is either
    // mDecor itself, or a child of mDecor where the contents go.

按注釋的意識就是mContentParent 就是我們加入layout的父布局,它有2種可能,DecorView 或者它的子View。

1.2 installDecor

installDecor就2塊 ,第一,new Decor,如果需要的話。

第二創建mContentParent。

mContentParent= generateLayout(mDecor);

我們來看看generateLayout。

有一堆的判斷,但是最終 加入Decor的過程,其實就2句。

View in = mLayoutInflater.inflate(layoutResource, null);
decor.addView(in, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));

第一句就是把layout id 變換成View。第二句就是把View加入到Decor中。

1.3 把Decor加入到Activity中。

Activity中的view,是通過Window 然後跟WMS來管理的。

一個Activity中對象持有mWindow對象。

mWindow ->WindowManager->WindowManagerImpl->WMS->ViewRoot->add View.

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved