将视图ID用于setContentView()时会发生什么

时间:2014-03-04 02:47:57

标签: android android-layout

Android开发人员指南似乎建议只能使用布局ID(R.layout。*)调用Activity.setContentView()。但是,我可以看到用于调用该方法的视图ID(R.id. *)。例如,在XBMC的org / xbmc / android / widget / slidingtabs / SlidingTabActivity.java中,我可以看到以下代码:

private void ensureTabHost() {
    if (mTabHost == null) {
        this.setContentView(R.id.slidingtabhost);
    }
}

那么,使用视图ID调用setContentView()是什么意思?谢谢!

基于评论的其他问题 - “setContentView(viewId);”等同于“View v = findViewById(viewId); setContentView(v);”?

2 个答案:

答案 0 :(得分:0)

  

只能使用布局ID(R.layout。)调用Activity.setContentView()。

setContentView()可以调用任何视图id。

布局也是一种观点!

答案 1 :(得分:0)

我认为该文档应该说:从视图(不仅是布局)资源设置活动内容。资源将膨胀,将所有顶级视图添加到活动中。实际上,它的工作方式如下:如果你创建了一个setConentView(R.layout.my_layout);然后android os将做以下工作:

LayoutInflater inflater= (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 View layout = inflater.inflate(R.layout.my_layout, null); 
setConentView(layout);

如果你创建一个setContentView(R.id.myview);它也是同样的膨胀方式。

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


View myview = inflater.inflate(R.id.myview, null);
setConentView(myview);  ` 

所以我说他们是一样的。