Android中styles.xml定义控件样式,themes.xml定义全局主题,二者均用标签且可共存于同一文件;控件style优先级高于theme,实现就近覆盖。
Android 中没有强制要求必须叫 styles.xml 或 themes.xml,文件名可以自定义(如 my_styles.xml、app_themes.xml),但习惯上统一放在 res/values/ 目录下,且都用 作为根标签。关键不是文件名,而是怎么写、怎么继承、怎么用。
styles.xml 是用来定义控件样式的
它专为单个 View(比如 TextView、Button)或 Layout 抽取公共属性,减少 XML 布局中重复书写。
- 每个
必须有唯一name,例如name="TitleText" -
的name对应控件的属性名,如android:textSize、android:background - 支持继承:用
parent="@style/ParentName"复用已有样式,子样式可覆盖父项属性 - 在布局中通过
style="@style/TitleText"应用,仅作用于该控件
示例:
bold
#FF0000
themes.xml(或 styles.xml 里定义的主题)用于全局界面风格
主题不是给某个按钮用的,而是作用于整个 Activity 或 Application,控制窗口行为、默认文字大小、颜色基调等。
- 主题也写在
标签里,但命名和用途侧重“窗体级”,如AppTheme、FullScreenTheme - 常用属性包括:
android:windowNoTitle、android:windowFullscreen、colorPrimary、android:windowBackground - 可用
?android:attr/xxx或?attr/xxx引用当前主题中已定义的值(比如?android:windowNoTitle) - 在
AndroidManifest.xml中通过android:theme="@style/AppTheme"绑定到 Activity 或 application - 也可在 Activity 的
onCreate()中调用setTheme(R.style.MyTheme),但必须在super.onCreate()和setContentView()之前
一个文件能同时放 style 和 theme 吗?
完全可以。Android 不区分文件用途,只看内容结构。常见做法是: