文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 13:42

关注

我们看到

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

我的公众号


作者:紫雾凌寒


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯