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”也很贴切。
本文解析了Android开发中setContentView与addContentView的区别。setContentView每次调用都会清空当前视图并重新加载布局资源,而addContentView则会在现有视图基础上添加新的视图组件,实现视图叠加。
1082

被折叠的 条评论
为什么被折叠?



