Activity与AppCompatActivity的setContentView的源码分析

本文详细分析了Android中Activity与AppCompatActivity的setContentView方法的源码,探讨了PhoneWindow、DecorView和ContentParent的角色以及加载布局的流程,解释了为什么在mContentParent为空时需要创建DecorView,并介绍了Activity与AppCompatActivity的主要区别。
摘要由CSDN通过智能技术生成

Activity与AppCompatActivity的setContentView的源码分析

Activity 中的MainActivity extends AppcompatActivity 与 extends Activity的区别呢?

解答:
AppCompatActivity是继承自v4的FragmentAvtivity,并且加入了很多的新特性。这个可以很好的兼容老设备
且在AppCompatActivity和Activity的区别在于app运行后是否有ActionBar的区别,界面(appname显示或者不显示)。对程序本身没有什么影响。

首先是我们打开一个Android应用,映入眼帘的是MainActivity extends AppcompatActivty,这是现在比较高版本的Android studio的创建的方式。或许你们见MainActivity extends Activity的版本,今天我们就是关于两者的setContextView方法进行讲解。

这篇文章我们先从Activity的方式进行讲解。

首先我们看到Activity的setContentView方法源码
public void setContentView(@LayoutRes int layoutResID) {
   
    getWindow().setContentView(layoutResID);
    initWindowDecorActionBar();
}

由于上面的源码得到,setContentView是移交给了getWindow返回的对象进行setContentView方法的实现。然而getWindow返回的对象是什么呢?这不经让我们好奇!!
我们再去查看源码:

有以上得知,PhoneWindow是Window的唯一实现类。所以实现setContentView方法的是PhoneWindow,所以我们再去打开PhoneWindow的setContentView方法:(我截取了关键性代码)

@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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值