本文翻译自:https://developer.android.com/guide/topics/ui/themes.html
Style和theme词汇是专用术语,下文直接使用而不翻译。
样式和主题(Styles and Themes)
一个样式(Style)是一个包含了指定样子和格式的作用于视图控件(View)或者窗体(Window)属性集合。一个style可以指定很多属性,比如 高度,填充,字体颜色,字体尺寸,背景色等。一个Style在xml资源文件中定义,并且和在xml中指定的布局区分开来。
在Android里的样式和Web设计中的CSS共享一个相似的原理,它们允许你分离设计(Design)和内容(Content).
举个例子,通过使用一个style,你可以让你的布局xml像下面这样:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#00FF00" android:typeface="monospace" android:text="@string/hello" />
并且,可以变成下面这样:
<TextView style="@style/CodeFont" android:text="@string/hello" />
所有关联到style的属性已经在布局xml中被删除了,并且放在一个叫做“CodeFont”style中定义了。它通过一个style属性被应用上。在下面的章节,你将会看到如何定义style。
一个主题(Theme)也是一个style,它被应用在所有的Activity或者application上,而不是个别的视图控件(View)(像上面的示例一样)。当一个style被当做一个theme来应用,每一个activity或者application中的视图控件将应用每一个它支持的样式属性。比如,你可以在activity上使用相同的CodeFont样式作为一个theme,这时Activity里的所有内部字体将会变成CodeFont样式的字体样式变成绿色的等宽字体。
定义一个样式Style
为了创建一些样式,你可以保存在你的工程下的 res/Values/ 文件夹下的一个XML文件中。XML文件的名字是随意的,但是必须扩展名是 .xml 并且存放在 res/Values/ 文件夹下。
XML文件的根节点必须是<resources>
为你创建的每个样式,添加一个<style>元素,并且需要一个name 属性,它标识唯一性而且是必需的属性。再为你的样式属性都添加进去,通过添加<item>元素来做,使用一个在样式属性里声明的name属性和一个value属性,这两个都是必需的。<item>的value属性可以是一个关键字字符串,一个16进制的颜色描述,一个其他资源类型的引用,或者在其他样式属性中依赖的value。下面是一个简单的示例样式文件内容:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CodeFont" parent="@android:style/TextAppearance.Medium"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#00FF00</item> <item name="android:typeface">monospace</item> </style> </resources>
每一个<resources>元素的子节点在编译时都被转换成一个程序资源对象。它可以通过<style>元素的name属性的值(value)来被引用引用。这个示例样式可以在XML布局中被引用,比如“@style/CodeFont”(像上面介绍的示例一样)。
在<style>元素中的parent属性是可选的并且指向一个其他样式中的资源ID,它可以从这个样式中继承一些属性。合适的话,你可以重写(override)继承到的属性。
记住,一个你想在activity或者application中使用的样式都被在XML文件中定义,并且所有的视图控件具有相同的样式。一个样式,比如上面定义的那个,可以被作为一style应用的单一的视图控件上或者被作为一个theme应用在全部的activity或者application上。如何应用的单一的视图或者作为应用的主题,我们稍后讨论。