这不是基于最新的 api 的吧?现在都是getDelegate() 了

来源:4-2 说说Activity的显示原理

慕瓜4130005

2019-05-25

@Override
public void setContentView(@LayoutRes int layoutResID) {
getDelegate().setContentView(layoutResID);
}

写回答

2回答

styluo

2019-05-25

这个应该跟版本没有关系,您贴的代码应该是AppCompatActivity#setContentView,代码分析的是Activity#setContentView,最主要的PhoneWindow#getDecorView调用installDecor中的逻辑是一样的,另一个重要的就是LayoutInflater.from对应的实现是一样的

// AppCompatDelegateImplV9#setContentView,委托的实现类
@Override
public void setContentView(int resId) {
    ensureSubDecor();  // 内部调用了PhoneWindow#getDecorView
    ViewGroup contentParent = (ViewGroup) mSubDecor.findViewById(android.R.id.content);
    contentParent.removeAllViews();
    LayoutInflater.from(mContext).inflate(resId, contentParent);
    mOriginalWindowCallback.onContentChanged();
}

// AppCompatDelegate#setContentView,注解上说明用于替换调用Activity的setContentView
/**
* Should be called instead of {@link Activity#setContentView(android.view.View)}}
*/
public abstract void setContentView(View v);


2
0

风语

2019-05-25

您好,这门课程是基于6.0的源码。

0
0

剖析Framework面试 冲击Android高级职位

一手助力冲刺Android高级职位,一手把握系统底层原理,理清面试思路,提升技术段位

1406 学习 · 187 问题

查看课程