本文主要是介绍setContentView将xml和java结合在一起流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
三个核心类:
Activity:调用setContentView
Window:产生视图的抽象类【实际生效类:PhoneWindow】
View:视图的抽象类【实际生效类:DecorView】
流程:
Activity调用setContentView,实际调用到PhoneWindow的对应方法;
PhoneWindow做了三件事:
1、生成一个DecorView;
2、生成一个ViewGroup包装DecorView;
3、通过LayoutInflater.inflate把layout_id的xml和ViewGroup关联起来。
一句话总结:
流程就是PhoneWindow通过LayoutInflater.inflate把layout_id和ViewGroup关联起来。
源码涉及的类:
com.android.internal.policy.PhoneWindow
其中重点方法installDecor():
1、生成一个DecorView;
2、生成一个ViewGroup包装DecorView;
3、根据主题等预定义标签初始化View;
4、inflate关联xml布局和view。
com.android.internal.policy.DecorView
android.view.Window
补充:setContentView()时,通过inflate,实际上是把id叫作content的FrameLayout作为root布局传入了,所以方法名叫作setContentView(),而不是叫setView()。
可以看一下PhoneWindow的generateLayout方法中返回的ViewGroup其实就是把ID为com.android.internal.R.id.content,
这样才能让inflate传入的xml的layout参数就能生效。(没有rootView的情况下,xml的最外层的layout参数不起作用)
这篇关于setContentView将xml和java结合在一起流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!