Theme与Style源码结构浅析
2018-06-20 本文已影响12人
黑色海鸥
追根溯源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()前设置;