美文网首页
纯粹的谈谈android.R.id.content

纯粹的谈谈android.R.id.content

作者: 锄禾豆 | 来源:发表于2019-11-12 09:31 被阅读0次

我们在Activity.onCreate中执行setContentView,其实是往Window里面进行setContentView

//Activity.java
public void setContentView(@LayoutRes int layoutResID) {
        getWindow().setContentView(layoutResID);//1
        initWindowDecorActionBar();
    }

注解1:getWindow()获取的是mWindow,而mWindow在attach的时候,初始化为PhoneWindow

//PhoneWindow.java
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();
        } ······
}

private void installDecor() {
        ······
        if (mDecor == null) {//1
            mDecor = generateDecor(-1);//2
            ······
        } else {
            mDecor.setWindow(this);
        }
        if (mContentParent == null) {//3
            mContentParent = generateLayout(mDecor);//4
            ······
        }
        ······
}

注解1:如果mDecor也就是DecorView不存在,就创建一个DecorView,也就是执行注解2
注解3:如果mContentParent不存在,就使用mDecor创建一个mContentParent,也就是执行注解4

protected ViewGroup generateLayout(DecorView decor) {
        ······
        int layoutResource;
        ······
        layoutResource = R.layout.****//1
        ······
        mDecor.onResourcesLoaded(mLayoutInflater, layoutResource);//2
        
        ViewGroup contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT);//3
        ······
        return contentParent;
}

注解1:layout就定义了content id
注解2:mDecor把资源文件addView到本身View中
注解3:Window.java中有定义变量ID_ANDROID_CONTENT = com.android.internal.R.id.content;
我们看findViewById

//Window.java
 public <T extends View> T findViewById(@IdRes int id) {
        return getDecorView().findViewById(id);//1
    }

注解1:getDecorView是从DecorView中获取android.R.id.content

总结,android.R.id.content来自DecorView,但是这个仅仅是DecorView的一个子View。
这里了解到它是子View之后,很多事情就需要注意了,例如title的去除等等

相关文章

  • 纯粹的谈谈android.R.id.content

    我们在Activity.onCreate中执行setContentView,其实是往Window里面进行setCo...

  • android.R.id.content 是什么,有什么用

    前言 最近看代码看到了 android.R.id.content android.R.id.content 是个什...

  • Window、PhoneWindow、DecorView和and

    findViewById(android.R.id.content),很眼熟;setContentView,天天用...

  • What is DecorView and android.R.

    引言 DecorView和android.R.id.content是什么呢,我们必须从最常见的setContent...

  • 纯粹的成长

    我算是一个简单的人,所以喜欢做一些纯粹的事。就像我做读书会,就是为了纯粹的读书,所以和书友们在一起读读书,谈谈天,...

  • 谈谈什么是纯粹,什么是真诚吧!

    总有人会告诉你,人生而孤独,然而,人是群居动物,毋容置疑。 我想谈谈见多识广这个问题,以前不明白,眼眸中闪着亮晶晶...

  • 人性与爱-尼尔机械纪元

    总结:这是一部彻底且纯粹的日式游戏 建议:要用心去游玩本作 仅以本文来谈谈我自己对于这部游戏的看法以及分析...

  • 说说我的灌篮情节

    很纯粹的找个地方,谈谈自己的想法,说说自己的故事,再希望有一点共鸣。 最近比较丧,明明列了很多计划表,却不想动,特...

  • 随笔之我想当股泥石流

    不是发发文艺的句子,谈谈文艺的书就叫文艺青年,文艺青年应该是干净而纯粹的,需不着外物陪衬,自然而然,无需外物标榜...

  • 纯粹的人,纯粹的爱

    打开门的一瞬间,他看到了这个世界上最璀璨的明眸,从此它烙印在他记忆深处,不再远离。 因为这次邂逅,他又重新燃起了对...

网友评论

      本文标题:纯粹的谈谈android.R.id.content

      本文链接:https://www.haomeiwen.com/subject/lxrfictx.html