一、定义
样式:是一个属性集合,用于指定单个 View
的外观。样式可以指定字体颜色、字号、背景颜色等属性。
主题:是应用于整个应用、activity 或视图层次结构,而非仅仅应用于单个视图的属性集合。当您应用主题背景时,应用或 Activity 中的每个视图都会应用其支持的每个主题背景属性。主题还可以将样式应用于非视图元素,例如状态栏和窗口背景。
1.1 声明:
样式和主题在 res/values/ 中的样式资源文件中声明,通常命名为 styles.xml (文件名可以任意设置 res/values/xxx.xml)
1.2 资源引用:
@style/style_name (style_name:元素中的 name 属性)
<?xml version="1.0" encoding="utf-8"?>
// 必需,根节点
<resources>
// style:定义单个样式。包含 item 元素
// name:必需。样式的名称
// parent:样式资源,会继承parent样式的属性
<style name="CustomText" parent="@style/Text">
// item:样式的单个属性
// name:必需。属性资源,必要时带有包前缀(如:android.textColor)
<item name="android:textSize">20sp</item>
<item name="android:textColor">#008</item>
</style>
</resources>
二、扩展和自定义样式
2.1 parent
为保持与系统界面样式的兼容性,应通过扩展框架或支持库中的现有样式来创建自己的样式。如需扩展样式,使用 parent
属性指定要扩展的样式。
<style name="GreenText" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
注意:不推荐以上写法 parent="@android:style/TextAppearance"
应继承 Android 支持库中的核心应用样式,支持库中的样式会针对各版本中可用的界面属性进行优化。支持库中的样式通常与平台中的样式具有相似的名称,但包含 AppCompat
。
<style name="GreenText" parent="TextAppearance.AppCompat">
<item name="android:textColor">#00FF00</item>
</style>
2.2 点分表示法
使用点分表示法(而非 parent 属性)扩展样式名称,从而继承样式(系统样式除外),通常仅适合用来扩展自己的样式,而不适合用来扩展其他库中的样式
<style name="GreenText.Large">
<item name="android:textSize">22dp</item>
</style>
三、样式作为主题背景应用
您可以像创建样式一样创建主题背景。不同之处在于应用它的方式:您不是对视图应用具有 style
属性的样式,而是对 AndroidManifest.xml
文件中的 <application>
标记或 <activity>
标记应用具有 android:theme
属性的主题背景。
<manifest ... >
<application android:theme="@style/Theme.AppCompat" ... >
<activity android:theme="@style/Theme.AppCompat.Light" ... >
</application>
</manifest>
还可以在布局文件中为视图指定 android:theme
属性。这会修改该视图及其任何子视图的主题背景,这对于更改界面中特定部分的主题背景调色板很有帮助。