Android LayoutInflater详解
来源:互联网 发布:js 提示允许加载flash 编辑:程序博客网 时间:2024/05/30 20:07
Android开发心得笔记,先看一段代码
public void OnCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
这个是Activity创建时执行的方法,其中最后一句大家应该都见过,这个加载布局的最简单的方法,但是如果,你需要动态加载布局,那就需要使用其他办法。
那就是LayoutInfater的inflate方法。
一。获得LayoutInflater实例的三种方式
1.LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()
2.LayoutInflater localinflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
3. LayoutInflater inflater = LayoutInflater.from(context);
二。inflate方法
public View inflate(int Resourece,ViewGroup root)
作用:填充一个新的视图层次结构从指定的XML资源文件中
reSource:View的layout的ID
root:生成的层次结构的根视图
return 填充的层次结构的根视图
如果参数root提供了,那么root就是根视图;否则填充的XML文件的根就是根视图。其余几个重载的inflate函数类似。
在View类中,也有inflate方法,相关的可以看下这篇文章 http://www.linuxidc.com/Linux/2014-11/108818.htm
结束语:
这段代码和之前说的那最后一句是一个意思:
LayoutInflater inflate = LayoutInflater.from(this);
View view = inflate.inflate(R.layout.main,null);
setContentView(view);
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
LayoutInflater是一个抽象类,在文档中如下声明:
public abstractclass LayoutInflater extends Object
获得 LayoutInflater实例的三种方式
1.LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater()
2.LayoutInflater inflater = LayoutInflater.from(context);
3.LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
其实,这三种方式本质是相同的,从源码中可以看出:
getLayoutInflater():
Activity的getLayoutInflater()方法是调用 PhoneWindow的getLayoutInflater()方法,看一下该源代码:
publicPhoneWindow(Context context)
{
super(context);
mLayoutInflater = LayoutInflater.from(context);
}
可以看出它其实是调用LayoutInflater.from(context)。
LayoutInflater.from(context):
public staticLayoutInflater from(Context context)
{
LayoutInflaterLayoutInflater = (LayoutInflater) context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
if(LayoutInflater == null)
{
throw new AssertionError("LayoutInflater not found.");
}
return LayoutInflater;
}
可以看出它其实调用context.getSystemService()。
结论:所以这三种方式最终本质是都是调用的Context.getSystemService()。
另外getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。
传入的Name 返回的对象 说明
WINDOW_SERVICE WindowManager 管理打开的窗口程序
LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定义的view
ACTIVITY_SERVICE ActivityManager 管理应用程序的系统状态
POWER_SERVICE PowerManger 电源的服务
ALARM_SERVICE AlarmManager 闹钟的服务
NOTIFICATION_SERVICE NotificationManager 状态栏的服务
KEYGUARD_SERVICE KeyguardManager 键盘锁的服务
LOCATION_SERVICE LocationManager 位置的服务,如GPS
SEARCH_SERVICE SearchManager 搜索的服务
VEBRATOR_SERVICE Vebrator手机震动的服务
CONNECTIVITY_SERVICE Connectivity 网络连接的服务
WIFI_SERVICE WifiManager Wi-Fi服务
TELEPHONY_SERVICE TeleponyManager电话服务
inflate方法
通过 sdk的 api 文档,可以知道该方法有以下几种过载形式,返回值均是 View对象,如下:
public Viewinflate (int resource, ViewGroup root)
public Viewinflate (XmlPullParser parser, ViewGroup root)
public Viewinflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
public Viewinflate (int resource, ViewGroup root, boolean attachToRoot)
示意代码:
LayoutInflaterinflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view =inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test));
//EditTexteditText = (EditText)findViewById(R.id.content);// error
EditTexteditText = (EditText)view.findViewById(R.id.content);
对于上面代码,指定了第二个参数 ViewGroup root,当然你也可以设置为 null值。
注意:
·inflate方法与 findViewById方法不同;
·inflater是用来找 res/layout下的 xml 布局文件,并且实例化;
·findViewById()是找具体 xml 布局文件中的具体 widget 控件(如:Button、TextView等)。
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android 的LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- Android LayoutInflater详解
- android系列: LayoutInflater详解
- Android LayoutInflater详解
- Android--LayoutInflater详解
- Android LayoutInflater详解
- 国际C混乱码大赛
- Android问题集锦之四十九:Can't add XStream file dependency to Android Studio project
- Android Studio 开发使用总结
- POJ 2387 Til the Cows Come Home (Dijkstra)
- 泛型
- Android LayoutInflater详解
- Course学习之旅--UW的Machine Learning Foundations: A Case Study Approach--Lesson 2,3,4,5
- Android 获取系统图库的图片
- 菜鸟的安卓之路。2016.06.11
- java.util.concurrent学习—Executor框架
- Jquery自带的弹出框效果
- 数据结构:数组+链表(巧妙!)
- mysql5.5 主从复制配置过程
- Nginx Location配置总结