`
buliedian
  • 浏览: 1237354 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android源码学习之一-Activity是如何实现主题变化的

阅读更多

要想回答这一问题,我们需要先从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

    这个压缩包"Android高级应用源码-Activity实现透明的最简洁Demo.zip"显然包含了关于如何创建具有透明背景的Activity的示例代码。让我们深入探讨一下这个话题。 在Android中,使Activity变得透明涉及到对主题(Theme...

    android源码程序---Phone

    通过研究和分析Android源码中的Phone应用,开发者不仅可以深入了解Android电话功能的实现原理,还能学习到如何设计和实现系统级别的服务,这对于Android应用开发者和系统级工程师来说是极其宝贵的资源。

    安卓Android源码——面试题-.zip

    在安卓开发领域,掌握Android源码对于提升技能和理解系统底层运作至关重要,特别是在面试环节,对源码的理解往往能体现一个开发者的深度。本资料"安卓Android源码——面试题-"将聚焦于Android源码相关的面试问题,...

    Android应用源码----语音播报系统源码.zip

    总的来说,这个"Android应用源码----语音播报系统源码.zip"是一个学习和理解Android TTS服务的宝贵资源,对于任何希望在Android应用中实现语音功能的开发者来说,都是值得研究的实例。通过阅读和分析源代码,你可以...

    Android高级应用源码-activity切换特效.zip

    这个"Android高级应用源码-activity切换特效.zip"包含了实现此类特效的源代码,旨在帮助开发者理解和实践Android中的动画效果。 在Android中,Activity之间的切换可以通过系统默认的过渡动画或自定义动画来实现。...

    Android高级应用源码-Activity启动和退出动画.rar

    本资源"Android高级应用源码-Activity启动和退出动画.rar"提供了一套实现此类动画的示例代码,对于深入理解Android应用开发,尤其是动画效果的实现具有很大的学习价值。 1. **Activity的生命周期** Activity的生命...

    安卓Android源码——-sliding-layer-lib-master.zip

    《安卓Android源码解析——sliding-layer-lib-master》 在Android开发中,滑动抽屉效果(Sliding Layer)是一种常见的交互设计,它通常用于实现侧边栏菜单或隐藏显示内容。sliding-layer-lib-master是一个专门针对...

    Android应用源码之ipcamera-for- 手机变成IP Camera-IT计算机-毕业设计.zip

    该压缩包文件“Android应用源码之ipcamera-for-手机变成IP Camera-IT计算机-毕业设计.zip”包含了一个Android应用程序的源代码,该程序能够将手机转变为一个IP摄像头。这是一项创新的移动开发项目,适合计算机科学或...

    Android笔记(3)---Activity和Intent

    在Android应用开发中,Activity和Intent是两...开发者需要深入学习这两个概念,以便更好地设计和实现功能丰富的Android应用。在实际开发中,不断实践和调试,结合源码阅读,将有助于提升对Android系统运行机制的理解。

    android-Camera2Basic-master源码

    总结,"android-Camera2Basic-master"源码为我们提供了一个了解和学习Camera2 API的良好起点。通过对源码的详细解读,开发者能更好地理解和实践如何在Android应用中集成和控制相机,从而创建出更丰富的相机功能。

    android-support-v4-src源码

    《深入解析Android support-v4库源码》 在Android应用开发中,`android-support-v4`库是一个不可或缺的部分,它...对于任何想要提升Android开发技能的人来说,研究`android-support-v4`源码都是一个宝贵的学习机会。

    Android-nRF-Toolbox-master

    Nordic Semiconductor作为BLE芯片的领先制造商,提供了强大的开发工具,其中之一就是Android-nRF-Toolbox。本文将深入探讨"Android-nRF-Toolbox-master"项目,这是Nordic官方提供的Android应用源码,旨在帮助开发者...

    Android应用源码之9.Activity高级学习-IT计算机-毕业设计.zip

    在这个"Android应用源码之9.Activity高级学习"的项目中,我们可以深入理解Activity的高级特性,这对于进行复杂的Android应用毕业设计至关重要。 1. **Activity生命周期**:Activity的生命周期是学习的重点,它包括...

    Android应用源码之android-flip 类似Flipboard翻转动画的实现.zip

    "Android应用源码之android-flip 类似Flipboard翻转动画的实现.zip"是一个示例项目,旨在教授如何在Android应用中实现类似Flipboard(一款流行的数字阅读应用)的翻转动画效果。这个源码实例可以帮助开发者深入理解...

    Android应用源码之Android摇一摇功能示例源码-IT计算机-毕业设计.zip

    这个"Android应用源码之Android摇一摇功能示例源码"是针对IT计算机专业学生进行毕业设计的一个很好的学习资源,旨在帮助开发者理解和实现这一特性。 首先,我们要了解"摇一摇"功能的原理。Android系统通过监听手机...

    Java和Android源码设计模式 2017-03-21

    ### Java和Android源码设计模式解析 #### 前言:设计模式的重要性 设计模式是软件工程中的一个重要概念,它代表了一种最佳实践,能够帮助开发者解决常见的编程问题。掌握设计模式不仅能够提升代码的质量,还能提高...

    Android应用源码---手持扫码枪APP开发源码.rar

    【Android应用源码---手持扫码枪APP开发源码】 在Android平台上开发一款手持扫码枪应用程序,需要理解并掌握一系列关键的技术点。以下是对这个压缩包文件中可能包含的知识点的详细解析: 1. **Android Studio集成...

    Android 酒店预订系统源码-IT计算机-毕业设计.zip

    总的来说,这个Android酒店预订系统源码是一个综合性的学习资源,它涵盖了Android开发的多个重要方面,对于提高开发者的技术水平和实践能力大有裨益。通过深入研究和实践,不仅可以掌握Android应用开发的基本技能,...

    Android应用源码之通话记录源码-IT计算机-毕业设计.zip

    在Android应用开发中,通话记录源码是一个典型的实践案例,尤其对于毕业生来说,这是一个很好的学习和研究项目。本文将深入探讨Android通话记录源码的相关知识点,帮助你理解如何在Android平台上构建一个能够读取、...

    Android开发应用源码-来电秀实现.zip

    【Android开发应用源码-来电秀实现.zip】这个压缩包文件是针对Android平台的一个来电秀应用的源码,主要用于帮助开发者学习如何在Android系统中实现个性化的来电显示功能。源码参考的价值在于它提供了实际的代码实现...

Global site tag (gtag.js) - Google Analytics