Theme与Style源码结构浅析

追根溯源Theme、Style等根源

假设app的主题

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

继承了Theme.AppCompat.Light.DarkActionBar这个style,这玩意又在framework的support v7包下res的themes.xml文件中,一层一层进入,最后发现追踪下去到了该包下的themes_base.xml中;代码如下

<style name="Platform.AppCompat" parent="android:Theme">
       <item name="android:windowNoTitle">true</item>

       <!-- Window colors -->
       <item name="android:colorForeground">@color/foreground_material_dark</item>
       <item name="android:colorForegroundInverse">@color/foreground_material_light</item>

       .......
</style>

接近400多个item属性,这也就是我们Android关于Theme的开山鼻祖了,在我们自定义时其实来这看比去API查还方便呢,有需求来这里搞就行;

Theme、Style加载时机及加载源码浅析

对于Theme有两种方式来使用,具体如下

  • 在AndroidManifest.xml中<application>或者<activity>节点设置android:theme属性;

  • 在Java代码中调用setTheme()方法设置Activity的Theme(须在setContentView()前设置;

参考

工匠若水

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容