`
lijie_sh
  • 浏览: 8557 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

android系统(4) activity 如何设置View

 
阅读更多
本文简单介绍一下 Activity 中setContentView 流程, 上图先




首先 Activity 中代码片段
public void setContentView(int layoutResID) {
    getWindow().setContentView(layoutResID);
}

public Window getWindow() {
    return mWindow;
}

final void attach {
    mWindow = PolicyManager.makeNewWindow(this);
}


PoliceManager中代码片段
private static final String POLICY_IMPL_CLASS_NAME =
       "com.android.internal.policy.impl.Policy";

public static Window makeNewWindow(Context context) {
       return sPolicy.makeNewWindow(context);
}


再看Policy类中的代码
public PhoneWindow makeNewWindow(Context context) {
    return new PhoneWindow(context);
}


从而可知 Activity中的setContentView 最终调用的是PhoneWindow类中的 setContentView.
PhoneWindow代码片段

public void setContentView(View view, ViewGroup.LayoutParams params) {
        if (mContentParent == null) {
            installDecor();
        } else {
            mContentParent.removeAllViews();
        }
        mContentParent.addView(view, params);
        final Callback cb = getCallback();
        if (cb != null) {
            cb.onContentChanged();
        }
    }

其中callback 实在 activity 的attach方法中设置的
mWindow = PolicyManager.makeNewWindow(this);
mWindow.setCallback(this);


综上 最终所有的view都是add在了mContentParent之上, mContentParent是一个ViewGroup的对象。
  • 大小: 14.1 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics