文件名无实质区别,决定样式或主题的是使用位置和parent继承链:android:theme用于Activity/Application级,android:style用于View级,属性覆盖遵循就近原则。
style.xml 和 theme.xml 文件名不同,但本质没区别
Android 并不强制要求你把样式和主题分开写在 styles.xml 和 themes.xml 里——系统只认 标签,不管它在哪个文件。你完全可以全塞进一个 styles.xml,也能全塞进 themes.xml,甚至拆成十个文件都没问题。所谓“区别”,其实是开发者约定俗成的组织方式:按用途分文件,不是按语法分文件。
真正起作用的是使用位置,不是文件名
同一个 ,如果用在 AndroidManifest.xml 的 android:theme 属性里,它就是主题;如果用在 TextView 的 android:style 属性里,它就当成了样式(哪怕名字里带 “Theme”)。系统不会校验你有没有“用错文件”,只看你在哪调用、用什么属性传入。
-
android:theme只接受作用于 Activity/Application 级别的 style(即通常意义上的“主题”) -
android:style只接受作用于 View 级别的 style(即通常意义上的“样式”) - 如果一个
同时被两者引用,android:style中定义的属性会覆盖android:theme中同名属性(比如都设了android:textColor,控件上的优先)
为什么建议分开建文件?——为避免混淆和误用
虽然技术上可以混写,但实际开发中,把主题和样式物理隔离能大幅降低出错概率: