setContentView() 、LayoutInflater的区别

来源:互联网 发布:网络在线对外汉语教师 编辑:程序博客网 时间:2024/05/16 15:17
1、setContentView() 、LayoutInflater二者通常在用法上的区别:
setContentView的用法
setContentView(int layoutResID)eg , setContentView(R.layout.main) 这个事初学的时候通常在onCreate方法里用到

setContentView(View view)    //就是放一个view对象的参数

setContentView(View view, ViewGroup.LayoutParams params)   //这种暂时还没有试过


LayoutInflater用法

LayoutInflater inflater = getLayoutInflater()//调用activity的getLayoutInflater()方法获得一个LayoutInflater

LayoutInflater localinflater = getSystemService(String nameater = getSystemService(String name)  //也是调用activity中的getSystemService方法,所用的参数也是内置的,可根据需要选择 eg , getSystemService(Context.Layout_INFLATER_SERVICE);

LayoutInflater inflater = LayoutInflater.from(context);   //eg , LayoutInflater.from(this);   

注:这三种获得LayoutInflater 的方式,本质其实是相同的,从源码中能够看出它们都是调用getSystemService()方法。


2、setContentView() 、LayoutInflater二者在Activity中使用的状态:
初学Android的时候,大家都知道我们在emulater上运行我们的android应用时就会有一个界面显示在模拟器上,而这里面就是我们在继承的Activity类中,重写的一个onCreate方法里使用了setContentView方法,把layout文件夹里面的布局文件(xml文件)设置进去,这样,我们在模拟器上就可以看到我们自己定义的andriod ui.
这里要详细介绍一下LayoutInflater:我们用LayoutInflater一般都是想要把一个没有被载入,或者想要动态载入的界面显示出来,在一个继承Activity基类的class中可以通过setContentView将界面显示出来,但在非继承于Activity的类中就需要LayoutInflater来Inflater了。所谓被载入和没有被载入区别在于,比如,当我们启动一个应用时,与入口Activity相关的layout就是被载入(启动应用时第一个显示在屏幕上的界面,通常就是main.xml);而其他的layout则是没有被载入的,这时就要动态载入或通过跳转到另一个activity.使用LayoutInflater可以得到项目中 layout文件夹下的某个xml布局文件,然后将该文件转化为View类型,有需要时再用setContentView(view)显示出来(一直不是很明白这样再显示出来有什么意义???). LayoutInflater可以与findViewById相比,只不过findViewById得到的是xml布局文件中某个具体的widget控件,如TextView/EditText/Button.....等一些界面元素
个人理解:如果我们的activity类不继承Activity基类,则就要通过LayoutInflater来加载界面;而如果activity类继承了Activity类,这时既可以用setContentView()来显示界面,也可以用Inflater加载界面。
 
原创粉丝点击