LayoutInflater is used to instantiate layout XML file into its corresponding View objects. It is never be used directly -- use getLayoutInflater()
or getSystemService(String)
to retrieve a standard LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are running on.
也就是说我们用LayoutInflater做一件事:inflate。inflate这个方法总共有四种形式,目的都是把xml表述的layout转化为View。
For example:
LayoutInflater inflater = (LayoutInflater)>context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
1. Context.public abstract Object getSystemService (String name) :Return the handle to a system-level service by name. The class of the returned object varies by the requested name
2. 有2种获得LayoutInflater的方法
(1)通过SystemService获得 LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
(2)从给定的contex获取 protected LayoutInflater (Context context)
(3)二者区别:实质是一样的,
请看源码
public static LayoutInflater from(Context context) { LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) { throw new AssertionError("LayoutInflater not found."); } return LayoutInflater; }
3. findViewById有2中形式
R.layout.xx 是引用res/layout/xx.xml的布局文件(inflate方法),R.id.xx是引用布局文件里面的组件,组件的id是xx...(findViewById方法)。看看R.java配置文件吧,R对文件分类管理,多写几个layout.xml后你会发现,所有的组件id都能用R.id.xx来查看,但是组件不在setContentView()里面的layout中就无法使用,Activity.findViewById()会出现空指针异常。
(1)Activity中的findViewById()
(2)View中的findViewById()
3. LayoutInflater.inflate()
将Layout文件转换为View,顾名思义,专门供Layout使用的Inflater。虽然Layout也是View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater,而不能通过findViewById(),这一段描述有误,看如下代码 。看下面文档写的已经很清楚
---------------------------------------------------------------------------------------------
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/placeslist_linearlayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </ScrollView>
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.placeslist_linearlayout); linearLayout.addView(place_type_text);
这是可运行的,这上面的xml中,LinearLayout不再是Layout的代表,而只是一个普通的View。
- 大小: 11.1 KB
- 大小: 57 KB
- 大小: 22.3 KB
分享到:
相关推荐
Android 中LayoutInflater的使用
down-test-Android 获得 LayoutInflater 实例的三种方式
android中LayoutInflater的使用.pdf
主要介绍了Android LayoutInflater分析的相关资料,需要的朋友可以参考下
测试:Android 中LayoutInflater的使用 注意:Aj_04是用了调用另外一个界面,要注意调用的方法, 还一定还要在AndroidManifest.xml 中加上呢句:<activity android:name="LayoutInflaterDemo"></activity>
LayoutInflater Layout 与 Inflater[扩充]两个单词的合并,可以理解为:当前Activity 布局的扩充.
Android高手进阶教程之----Android 中LayoutInflater的使用! .doc Android高手进阶教程之----Android 中MenuInflater的使用(布局定义菜单)! .doc Android高手进阶教程之----Android 中Preferences的使用! .doc ...
Android 中LayoutInflater(布局加载器)之实战篇 博客的Demo 博客地址: http://blog.csdn.net/l540675759/article/details/78112989 两种方式实现小红书的引导页: (1)自定义View (2)自定义LayoutInflater....
NULL 博文链接:https://yufeng-zhu.iteye.com/blog/1676207
android-blink 演示 LayoutInflater 复活节彩蛋的小型 Android 项目。
android inflate demo,方便新手使用,下载导入android studio就可直接运行,简单明了的展现inflate不同参数的区别
在android中,LayoutInflater有点类似于Activity的findViewById(id),不同的是LayoutInflater是用来找layout下的xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。...
主要介绍了Android开发实现自定义Toast、LayoutInflater使用其他布局,涉及Android自定义Toast与界面布局相关操作技巧,需要的朋友可以参考下
通过LayoutInflater.Factory实现主题切换功能,详见:http://blog.csdn.net/llew2011
了解过换肤框架的同学知道,利用setFactory(LayoutInflater inflater, LayoutInflaterFactory factory)可以在不更新布局文件的情况下替换布局中View为自定义View,并且对开发者透明。利用这个原理我们可以把原生的...
LayoutInflater类在我们日常开发中经常会用到,最近在使用中就遇到了一些问题,所有下面这篇文章主要给大家总结了关于Android中使用LayoutInflater要注意的一些坑,希望通过这篇能让大家避免走一些弯路,需要的朋友...
主要介绍了Android开发之获取LayoutInflater对象的方法,结合实例形式总结分析了Android获取LayoutInflater对象的常用技巧,需要的朋友可以参考下
关于Android的LayoutInflater的使用!
对于有一定Android开发经验的同学来说,一定使用过LayoutInflater.inflater()来加载布局文件,但并不一定去深究过它的原理,比如 1.LayoutInflater为什么可以加载layout文件? 2.加载layout文件之后,又是怎么变成供...