activity 中 addContentView 和 setContentView 的区别是什么?
首先看setContentView
逻辑在PhoneWindow 类中
- @Override
- public void setContentView(int layoutResID) {
- if (mContentParent == null) {
- installDecor();
- } else {
- mContentParent.removeAllViews();
- }
- mLayoutInflater.inflate(layoutResID, mContentParent);
- final Callback cb = getCallback();
- if (cb != null && !isDestroyed()) {
- cb.onContentChanged();
- }
- }
如果多次调用setContentView ,则之后每次都会清空 mContentParent 容器。然后组装资源layoutResID。
addContentView
逻辑也在PhoneWindow 类中
- @Override
- public void addContentView(View view, ViewGroup.LayoutParams params) {
- if (mContentParent == null) {
- installDecor();
- }
- mContentParent.addView(view, params);
- final Callback cb = getCallback();
- if (cb != null && !isDestroyed()) {
- cb.onContentChanged();
- }
- }
如果多次调用addContentView ,则之后每次都会将view添加到mContentParent 容器中。最后产生view 的叠加效果。
结论:
调用 setContentView 。设置时会清空容器再添加 view。无view叠加效果
调用addContentView 。直接添加到view容器中,有view叠加效果。addView的字面意思“添加view”也很贴切。