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”也很贴切。