Android布局文件的加载过程分析:Activity.setContentView()源码分析

本文详细分析了Android中Activity.setContentView()方法的源码流程,揭示了布局文件如何通过调用链加载。内容涵盖从setContentView()到PhoneWindow的installDecor()步骤,适用于理解Android界面显示的底层机制。
摘要由CSDN通过智能技术生成

大家都知道在Activity的onCreate()中调用Activity.setContent()方法可以加载布局文件以设置该Activity的显示界面。本文将从setContentView()的源码谈起,分析布局文件加载所涉及到的调用链。本文所用的源码为android-19.

Step 1  、Activity.setContentView(intresId)

public void setContentView(int layoutResID) {
	getWindow().setContentView(layoutResID);
	initActionBar();
}

public Window getWindow() {
	return mWindow;
}
该方法调用了该Activity成员的mWindow,mWindow为Window对象。Windown对象是一个抽象类,提供了标准UI的显示策略和行为策略。在SDK中只有PhoneWindow类实现了Window类,而Window中的setContentView()为空函数,所以最后调用的是PhoneWindow对象的方法。

Step 2  、PhoneWindow.setContentView()

@Override
public void setContentView(int layoutResID) {
	if (mContentParent == null) {
		installDecor();
	} else {
		mContentParent.removeAllViews();
	}
	// 将布局文件添加到mContentParent中
	mLayoutInflater.inflate(layoutResID, mContentParent);
	final Callback cb = getCallback();
	if (cb != null && !isDestroyed()) {
		cb.onContentChanged();
	}
}
该方法首先根据mContentParent是否为空对mContentParent进行相应的设置。mContentParent为ViewGroup类型,若其已经初始化了,则移除所有的子View,否则调用installDecor()初始化。接着将资源文件转成View树,并添加到mContentParent视图中。

Step 3、 PhoneWindow.installDecor() 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值