iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android源码分析——View是如何被添加到屏幕的?
  • 195
分享到

Android源码分析——View是如何被添加到屏幕的?

viewAndroid 2022-06-06 13:06:44 195人浏览 独家记忆
摘要

我们看到R.id.content确实是存在的,并且它是一个FrameLayout。到这里我们来看下现在前面这些具体做了哪些? 如下图所示,到

我们看到

R.id.content
确实是存在的,并且它是一个
FrameLayout
。到这里我们来看下现在前面这些具体做了哪些?
如下图所示,到这里 Activity 持有一个 PhoneWindow 对象,PhoneWindow 中有一个 DecorView ,DecorView 中加载了一个基础的资源布局,里面有 title,ActionBar 等,肯定存在一个 id 为
R.id.ccontent
的资源布局。
在这里插入图片描述

看到这里就完了?不不不,还有我们继续往下看!!!

2.2 mLayoutInflater.inflate(layoutResID, mContentParent)

我们继续回到

PhoneWiondow
setContentView(int layoutResID)
,如下:

    @Override
    public void setContentView(int layoutResID) {
        // Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window
        // decor, when theme attributes and the like are crystalized. Do not check the feature
        // before this happens.
        if (mContentParent == null) {
            installDecor();
        } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
            mContentParent.removeAllViews();
        }
        if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
            final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,
                    getContext());
            transitionTo(newScene);
        } else {
            mLayoutInflater.inflate(layoutResID, mContentParent);
        }
        mContentParent.requestApplyInsets();
        final Callback cb = getCallback();
        if (cb != null && !isDestroyed()) {
            cb.onContentChanged();
        }
        mContentParentExplicitlySet = true;
    }

我们前面看完了

installDecor()
方法,我们继续往下看,我们看到下面紧接着调用了
mLayoutInflater.inflate(layoutResID, mContentParent);
将之前 Activity 中从传入的资源布局加载到我们前面初始化的
mContentParent
中,也就是在资源ID为
R.id.ccontent
的 Framlayout 中。现在我们来看看我们传进来的资源布局文件被加载到哪里了?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XcvnGd5G-1585374618136)(http://www.bthvi.work/wp-content/uploads/2020/03/资源布局文件.png)]

总结

这篇文章我们从 Ativity 的 setContentView(layoutResourceId) 开始,一步步追踪 Android FrameWork 层的源码。探究了我们平时代码中写的资源布局是如何被加载到 Activity 中的。我们根据源码简单画了一个流程图如下:
View被添加到Activity流程图

欢迎在评论区留下你的观点大家一起交流,一起成长。如果今天的这篇文章对你在工作和生活有所帮助,欢迎转发分享给更多人。

同时欢迎大家加入我组建的大前端学习交流群,群里大家一起学习交流 Android、Flutter等知识。从这里出发我们一起讨论,一起交流,一起提升。

群号:872749114

我的公众号


作者:紫雾凌寒


--结束END--

本文标题: Android源码分析——View是如何被添加到屏幕的?

本文链接: https://www.lsjlt.com/news/29333.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作