Android setContentView(视图视图)和setContentView(int layoutResId)之间的差异
我的MainActivity扩展了BaseActivity。在我的BaseActivity中,我重写了Android setContentView(视图视图)和setContentView(int layoutResId)之间的差异,android,android-inflate,setcontentview,Android,Android Inflate,Setcontentview,我的MainActivity扩展了BaseActivity。在我的BaseActivity中,我重写了setContentView(int-layoutResId)(请参阅下文),这样当我的MainActivity调用setContentView(R.layout.activity_-main)时,BaseActivity内部的视图组件--activityContainer将包含R.layout.activity\u main作为方法GetLayoutFlater().inflate(layou
setContentView(int-layoutResId)
(请参阅下文),这样当我的MainActivity调用setContentView(R.layout.activity_-main)
时,BaseActivity内部的视图组件--activityContainer
将包含R.layout.activity\u main
作为方法GetLayoutFlater().inflate(layoutResID,activityContainer,true)后的子级代码>被调用。如果我想在BaseActivity中重写setContentView(视图视图)
而不是setContentView(int-layoutResId)
,我如何实现同样的效果
编辑:这两种方法的区别是什么
内部基本活动:
@Override
public void setContentView(int layoutResId) {
RelativeLayout baseActivity = (RelativeLayout) getLayoutInflater()
.inflate(R.layout.activity_base, null);
FrameLayout activityContainer = (FrameLayout) baseActivity
.findViewById(R.id.activity_container);
getLayoutInflater().inflate(layoutResID, activityContainer, true);
}
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
<FrameLayout
android:id="@+id/activity_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
.... other components
</RelativeLayout>
activity\u base.xml:
@Override
public void setContentView(int layoutResId) {
RelativeLayout baseActivity = (RelativeLayout) getLayoutInflater()
.inflate(R.layout.activity_base, null);
FrameLayout activityContainer = (FrameLayout) baseActivity
.findViewById(R.id.activity_container);
getLayoutInflater().inflate(layoutResID, activityContainer, true);
}
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
<FrameLayout
android:id="@+id/activity_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
.... other components
</RelativeLayout>
.... 其他组成部分
两种方法的描述:
设置内容视图(int layoutResID):
Set the activity content from a layout resource.
The resource will be inflated, adding all top-level views to the activity.
Set the activity content to an explicit view.
This view is placed directly into the activity's view hierarchy.
It can itself be a complex view hierarchy.
设置内容视图(视图视图,ViewGroup.LayoutParams参数):
Set the activity content from a layout resource.
The resource will be inflated, adding all top-level views to the activity.
Set the activity content to an explicit view.
This view is placed directly into the activity's view hierarchy.
It can itself be a complex view hierarchy.
基本上,区别在于期望布局ID的视图首先将其膨胀,然后将其添加到活动根视图中
带有视图的视图不会进行任何膨胀,它只是使用给定的LayoutParams
立即将其添加到根视图中
总之,您的重写方法如下所示:
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
RelativeLayout baseActivity = (RelativeLayout) getLayoutInflater()
.inflate(R.layout.activity_base, null);
FrameLayout activityContainer = (FrameLayout) baseActivity
.findViewById(R.id.activity_container);
activityContainer.addView(view, params);
}
在Activity
类中有两个抽象方法,您可以在BaseActivity
中实现它们
public abstract void setContentView(View view);
及
一旦实现,您可以在main活动中使用这些方法
我认为不同之处在于(查看布局ResID)
和(查看视图)
使用方法setContentView(int-layoutResID)
:从版面资源设置活动内容
使用方法setContentView(视图视图)
:您可以从视图中设置活动内容(此视图可以从布局资源获取,也可以通过编程方式创建)如果我错了,请更正我<代码>activityContainer.addView(视图,参数)
几乎与getLayoutFlater()相同。充气(layoutResID,activityContainer,true)代码>?唯一的区别是,在使用addView
方法之前,我需要先对布局进行充气以获得视图?