android入门(2)-LayoutInflater总结

首先解释一下infalter的英语意思:填充,膨胀


LayoutInfalter通常用来来findViewbyId来对比,两者的差别是:

1.不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;

2.findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。

具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;(得到界面实例对像,即布局文件对象)
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得 其中的界面元素。(通过第一步的实例对像,我们可以取其中界面元素,即获取具体控件)


这里比较难以理解的是什么时候界面载入过,什么时候页面没有载入过,从网上有一篇文章是这样理解的:

什么是已经被载入的layout,什么是还没有载入的.我们启动一个应用,与入口Activity相关的layout{常见的是main.xml}就是被载入的,即在Oncreate()中的.而其他的layout是没有被载入的.就要动态载入了或通过另一个activity.(其实我个人觉得这里其实没法说明本质的原因),另外一篇博文中描述的更清楚:

http://www.open-open.com/lib/view/open1328837587484.html

public class MyInflate extends Activity{
    private TextView tv;
    public void OnCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        //tv = (TextView) findViewById(R.id.tv);
        //注释部份和没注释部分效果是一样的
        LayoutInflater inflate = LayoutInflater.from(this);
        View view = inflate.inflate(R.layout.main,null);
        setContentView(view);
    }
}

setContentView()一旦调用, layout就会立刻显示UI;而inflate只会把Layout形成一个以view类实现成的对象,有需要时再用setContentView(view)显示出来。一般在activity中通过setContentView()将界面显示出来,但是如果在非activity中如何对控件布局设置操作了,这就需要LayoutInflater动态加载。

个人理解为:setContentView里面一般就会加载界面,如果有方法加载过界面,那直接可以通过findViewById来取得相关控件,而在非activity中,是没有setContentView来加载界面,所以我们就需要使用LayoutInflater了。


LayoutInflater用法:

LayoutInflater的作用是,把一个View的对象与XML布局文件关联并实例化。

  • View的对象实例化之后,可以通过findViewById()查找布局文件中的指定Id的组件。


    比如上篇文章中的list_item我们可以通过LayoutInflater关联到list_item,并实例化这个View,然后我们可以通过 findViewById来取得里面的title,content;


    LayoutInflater三种使用方法:

    LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.main, null);
     
    LayoutInflater inflater = LayoutInflater.from(context); (该方法实质就是第一种方法,可参考源代码)
    View layout = inflater.inflate(R.layout.main, null);
     
    LayoutInflater inflater = getLayoutInflater();(在Activity中可以使用,实际上是View子类下window的一个函数)
    View layout = inflater.inflate(R.layout.main, null);



    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值