要想回答这一问题,我们需要先从Activity的基类入手
来看Context类,该类是一个抽象类,为访问应用程序的环境信息提供了全局的接口,通过它可以访问到应用程序的资源,类型,以及运行中的Activitys,正在广播和接收中的Intents等。
/** Return a Resources instance for your application's package. */
public abstract Resources getResources();
/**
* Set the base theme for this context. Note that this should be called
* before any views are instantiated in the Context (for example before
* calling {@link android.app.Activity#setContentView} or
* {@link android.view.LayoutInflater#inflate}).
*
* @param resid The style resource describing the theme.
*/
public abstract void setTheme(int resid);
/**
* Return the Theme object associated with this Context.
*/
public abstract Resources.Theme getTheme();
既然Context类是一个抽象类,没有提供具体的实现,我们就循迹来看它的子类ContextWrapper类,该类是一个具本类,实现了Context的接口,但实现方式很简单,只是简单的委托给其他的Context对象。例如:
@Override
public Resources getResources()
{
return mBase.getResources();
}
@Override
public void setTheme(int resid) {
mBase.setTheme(resid);
}
@Override
public Resources.Theme getTheme() {
return mBase.getTheme();
}
继续来看ContextWrapper的子类ContextThemeWrapper,该类是针对Context主题部分的包装类,其主要功能是主题变换,在GetTheme()中通过initializeTheme()的调用将主题启用。
protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
theme.applyStyle(resid, true);
}
private void initializeTheme() {
final boolean first = mTheme == null;
if (first) {
mTheme = getResources().newTheme();
Resources.Theme theme = mBase.getTheme();
if (theme != null) {
mTheme.setTo(theme);
}
}
onApplyThemeResource(mTheme, mThemeResource, first);
}
至此,Activity派生于ContextThemeWrapper,就具备了变换主题的能力了。
——欢迎转载,请注明出处,谢谢——
分享到:
相关推荐
这个压缩包"Android高级应用源码-Activity实现透明的最简洁Demo.zip"显然包含了关于如何创建具有透明背景的Activity的示例代码。让我们深入探讨一下这个话题。 在Android中,使Activity变得透明涉及到对主题(Theme...
通过研究和分析Android源码中的Phone应用,开发者不仅可以深入了解Android电话功能的实现原理,还能学习到如何设计和实现系统级别的服务,这对于Android应用开发者和系统级工程师来说是极其宝贵的资源。
在安卓开发领域,掌握Android源码对于提升技能和理解系统底层运作至关重要,特别是在面试环节,对源码的理解往往能体现一个开发者的深度。本资料"安卓Android源码——面试题-"将聚焦于Android源码相关的面试问题,...
总的来说,这个"Android应用源码----语音播报系统源码.zip"是一个学习和理解Android TTS服务的宝贵资源,对于任何希望在Android应用中实现语音功能的开发者来说,都是值得研究的实例。通过阅读和分析源代码,你可以...
这个"Android高级应用源码-activity切换特效.zip"包含了实现此类特效的源代码,旨在帮助开发者理解和实践Android中的动画效果。 在Android中,Activity之间的切换可以通过系统默认的过渡动画或自定义动画来实现。...
本资源"Android高级应用源码-Activity启动和退出动画.rar"提供了一套实现此类动画的示例代码,对于深入理解Android应用开发,尤其是动画效果的实现具有很大的学习价值。 1. **Activity的生命周期** Activity的生命...
《安卓Android源码解析——sliding-layer-lib-master》 在Android开发中,滑动抽屉效果(Sliding Layer)是一种常见的交互设计,它通常用于实现侧边栏菜单或隐藏显示内容。sliding-layer-lib-master是一个专门针对...
该压缩包文件“Android应用源码之ipcamera-for-手机变成IP Camera-IT计算机-毕业设计.zip”包含了一个Android应用程序的源代码,该程序能够将手机转变为一个IP摄像头。这是一项创新的移动开发项目,适合计算机科学或...
在Android应用开发中,Activity和Intent是两...开发者需要深入学习这两个概念,以便更好地设计和实现功能丰富的Android应用。在实际开发中,不断实践和调试,结合源码阅读,将有助于提升对Android系统运行机制的理解。
总结,"android-Camera2Basic-master"源码为我们提供了一个了解和学习Camera2 API的良好起点。通过对源码的详细解读,开发者能更好地理解和实践如何在Android应用中集成和控制相机,从而创建出更丰富的相机功能。
《深入解析Android support-v4库源码》 在Android应用开发中,`android-support-v4`库是一个不可或缺的部分,它...对于任何想要提升Android开发技能的人来说,研究`android-support-v4`源码都是一个宝贵的学习机会。
Nordic Semiconductor作为BLE芯片的领先制造商,提供了强大的开发工具,其中之一就是Android-nRF-Toolbox。本文将深入探讨"Android-nRF-Toolbox-master"项目,这是Nordic官方提供的Android应用源码,旨在帮助开发者...
在这个"Android应用源码之9.Activity高级学习"的项目中,我们可以深入理解Activity的高级特性,这对于进行复杂的Android应用毕业设计至关重要。 1. **Activity生命周期**:Activity的生命周期是学习的重点,它包括...
"Android应用源码之android-flip 类似Flipboard翻转动画的实现.zip"是一个示例项目,旨在教授如何在Android应用中实现类似Flipboard(一款流行的数字阅读应用)的翻转动画效果。这个源码实例可以帮助开发者深入理解...
这个"Android应用源码之Android摇一摇功能示例源码"是针对IT计算机专业学生进行毕业设计的一个很好的学习资源,旨在帮助开发者理解和实现这一特性。 首先,我们要了解"摇一摇"功能的原理。Android系统通过监听手机...
### Java和Android源码设计模式解析 #### 前言:设计模式的重要性 设计模式是软件工程中的一个重要概念,它代表了一种最佳实践,能够帮助开发者解决常见的编程问题。掌握设计模式不仅能够提升代码的质量,还能提高...
【Android应用源码---手持扫码枪APP开发源码】 在Android平台上开发一款手持扫码枪应用程序,需要理解并掌握一系列关键的技术点。以下是对这个压缩包文件中可能包含的知识点的详细解析: 1. **Android Studio集成...
总的来说,这个Android酒店预订系统源码是一个综合性的学习资源,它涵盖了Android开发的多个重要方面,对于提高开发者的技术水平和实践能力大有裨益。通过深入研究和实践,不仅可以掌握Android应用开发的基本技能,...
在Android应用开发中,通话记录源码是一个典型的实践案例,尤其对于毕业生来说,这是一个很好的学习和研究项目。本文将深入探讨Android通话记录源码的相关知识点,帮助你理解如何在Android平台上构建一个能够读取、...
【Android开发应用源码-来电秀实现.zip】这个压缩包文件是针对Android平台的一个来电秀应用的源码,主要用于帮助开发者学习如何在Android系统中实现个性化的来电显示功能。源码参考的价值在于它提供了实际的代码实现...