Activity与各种View的关系

widget。
       1、界面中展示的各个小组件。2、有独立的事件处理能力。3、所有Wiget组件都是继承View而来

ViewGroup。
        继承于View,是个容器,内部有View[]数组;有些Widget(如ImageView,TextView等)继承View;有些Widget(如AdapterView,GridView等)继承ViewGroup;所有Layout(如LinearLayout,FrameLayout)也都继承ViewGroup。用于对添加进ViewGroup的View进行布局。

Window。
       是个抽象类,PhoneWindow是唯一实现类;它拥有个Context,在构造的赋值,通过它可以获取各种系统参数。它拥有个WindowManager,负责跟系统的WINDOW_SERVICE通信。它拥有个派生自FrameLayout的DecorView,作为该窗口上的控件树的根。它拥有Window类型的mContainer和mActiveChild,用于管理窗口之间的关系。

PhoneWindow主要包含:
       标题(TextView mTitleView和ActionBarView mActionBar);内容区域(ViewGroup mContentParent),通常用setContentView()设置。
选择菜单(ContextMenuBuilder mContextMenu),可以显示或隐藏。

Activity。
       跟Application和Service等都派生自Context(上下文,环境)。它拥有个Window,在attach()时,由PolicyManager.makeNewWindow()赋值。 它拥有个mMainThread,用于记录执行线程,在attach()时,由外部传入。它拥有Activity类型的mParent,用于维护Activity之间的关系。PolicyManager拥有个IPolicy,它的makeNewWindow()调用了new PhoneWindow。

这张是继承View的各种子类图。
在这里插入图片描述

       每一个 Activity 都持有一个 Window 对象,但是 Window 是一个抽象类,这里 Android 为 Window 提供了唯一的实现类 PhoneWindow。也就是说 Activity 中的 window 实例就是一个 PhoneWindow 对象。
DecorView是顶级View,继承自FrameLayout,而它又是PhoneWindow的一个成员。
       那么每一个 Activity 持有一个 PhoneWindow 的对象,而一个 PhoneWindow 对象持有一个 DecorView 的实例,所以 Activity 中 View 相关的操作其实大都是通过 DecorView 来完成。
       decorView 本身是一个 FrameLayout,当 decorView 接受到来自 Activity 传递过来的布局 id 后,通过 inflater(布局填充器),把布局资源 id 转换为一个 View,然后把这个布局 View 添加在自身中。
       在实际开发中LayoutInflater这个类是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用 来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如 Button、TextView等)。 具体作用: ①对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;②对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获取其中的界面元素。

参考文章
https://blog.csdn.net/weixin_41101173/article/details/79685305
https://blog.csdn.net/jason_wks/article/details/6619224

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值