码迷,mamicode.com
首页 > 移动开发 > 详细

Android--自定义控件(一) LayoutInflater

时间:2015-11-16 00:45:28      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:

LayoutInflater一定不会陌生,都会知道它主要是用于加载布局的

因为加载布局的任务通常都是在Activity中调用setContentView()

setContentView()方法 的内部就是用LayoutInflater实现的。、只不过这部分源码是internal的,不太容易查看到

1、获取到LayoutInflater的实例

法1、

LayoutInflater layoutInflater = LayoutInflater.from(context);  

 

法2、

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

 

其实第一种就是第二种的简单写法,只是Android给我们做了一下封装而已。得到了LayoutInflater的实例之后就可以调用它的inflate()方法来加载布局了,

layoutInflater.inflate(resourceId, root);  

inflate()方法一般接收两个参数,

第一个参数就是要加载的布局id

第二个参数是指给该布局的外部再嵌套一层父布局,如果不需要就直接传null。这样就成功成功创建了一个布局的实例,之后再将它添加到指定的位置就可以显示出来了。

 mainLayout.addView(buttonLayout);  

 

LayoutInflater技术广泛应用于需要动态添加View的时候,比如在ScrollView和ListView中,经常都可以看到LayoutInflater的身影。

 

LayoutInflater其实就是使用Android提供的pull解析方式来解析布局文件的。

 

createViewFromTag()这个方法,并把节点名和参数传了进去。看到这个方法名,我们就应该能猜到,它是用于根据节点名来创建View对象的。确实如此,在createViewFromTag()方法的内部又会去调用createView()方法,然后使用反射的方式创建出View的实例并返回。

 

 

LinearLayout的父布局确实是一个FrameLayout,而这个FrameLayout就是由系统自动帮我们添加上的。

 

我们调用setContentView()方法时所传入的布局其实就是放到这个FrameLayout中的,这也是为什么这个方法名叫作setContentView(),而不是叫setView()。

 

Android--自定义控件(一) LayoutInflater

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4967731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!