LayoutInflater布局管理器

五迷三道 提交于 2019-12-04 01:17:04

LayoutInflater作用是将layout的xml布局文件实例化为View类对象。

实现LayoutInflater的实例化共有3种方法,

(1).通过SystemService获得

    LayoutInflater inflater = (LayoutInflater)context.getSystemServices(Context.LAYOUT_INFLATER_SERVICES);

    View view = inflater.inflate(R.layout.main, null);

(2).从给定的context中获得

    LayoutInflater inflater = LayoutInflater.from(context);

    View view = inflater.inflate(R.layout.mian, null);

(3).

    LayoutInflater inflater =getLayoutInflater();(在Activity中可以使用,实际上是View子类下window的一个函数)

    View layout = inflater.inflate(R.layout.main, null);

 


其实,这三种方式本质是相同的,从源码中可以看出:

getLayoutInflater():

Activity的getLayoutInflater()方法是调用PhoneWindow的getLayoutInflater()方法,看一下该源代码:

    public PhoneWindow(Context context) {

        super(context);

        mLayoutInflater = LayoutInflater.from(context);

    }

可以看出它其实是调用LayoutInflater.from(context)。

LayoutInflater.from(context):

    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;

    }

可以看出它其实调用context.getSystemService()。

 

 

public View inflate(int Resourece,View Grouproot)
作用:填充一个新的视图层次结构从指定的XML资源文件中
reSource:View的layout的ID
root: 生成的层次结构的根视图
return 填充的层次结构的根视图。如果参数root提供了,那么root就是根视图;否则填充的XML文件的根就是根视图。

其余几个重载的inflate函数类似。

另外补充下,getSystemService是Activity中的方法,根据传入的name来取得对应的服务对象,这些服务名称参数都是Context类中的常量:

传入的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          电话服务



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!