1 style
1.1 什么是 style?
官方文档是这样定义style
的:
A style resource defines the format and look for a UI. A style can be applied to an individual View (from within a layout file) or to an entire Activity or application (from within the manifest file).
style
是作用于单个view
的,而theme
是作用于整个Activity
或者application
。
1.2 文件位置
res/values/filename.xml
1.3 资源引用
In XML:@[package:]style/style_name
1.4 语法
<?xml version="1.0" encoding="utf-8"?>
//根标签
<resources>
//定义一个包含item的style
<style
name="style_name" parent="@[package:]style/style_to_inherit">
//定义一个style的属性
<item
name="[package:]style_property_name">style_value
</item>
</style>
</resources>
<resources>
元素的每个子项都会在编译时转换成一个应用资源对象,该对象可由<style>
元素的name
属性中的值引用。
<style>
元素中的parent
属性是可选属性,它指定应作为此样式所继承属性来源的另一样式的资源ID
。如果愿意,您可在随后替换这些继承的样式属性。
1.5 示例
定义style
的XML文件(保存在res/values
里):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomText" parent="@style/Text">
<item name="android:textSize">20sp</item>
<item name="android:textColor">#008</item>
</style>
</resources>
style
作用于TextView
的XML文件(保存在res/layout
):
<?xml version="1.0" encoding="utf-8"?>
<EditText
//上述定义的style: CustomText
style="@style/CustomText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello, World!" />
1.6 继承
有两种方式可以继承:
- 通过
parent
- 通过点(.)
现在我们定义一个style
,继承Android
平台的默认文本外观,然后对其进行修改:
<style name="GreenText" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
可以通过<style>
元素中的parent
属性指定应作为您的样式所继承属性来源的样式。您可以利用它来继承现有样式的属性,然后只定义您想要更改或添加的属性。 您可以从自行创建的样式或平台内建的样式继承属性。
如果您想从自行定义的样式继承属性,则不必使用parent
属性, 而是只需将您想继承的样式的名称以前缀形式添加到新样式的名称之中,并以句点进行分隔。
例如:要创建一个继承上文定义的GreenText
样式的新样式,但将颜色设置为红色。
<style name="GreenText.Red">
<item name="android:textColor">#FF0000</item>
</style>
请注意<style>
标记中没有 parent 属性,但由于name
属性以GreenText
样式名称(这是您创建的一个样式)开头,因此这个样式会继承该样式的所有样式属性。 这个样式随后会替换android:textColor
属性,将文本设置为红色。 您可以@style/GreenText.Red
形式引用这个新样式。
您可以通过使用句点链接名称继续进行这样的继承,次数不限。
注意:这种通过将名称链接起来的继承方法只适用于由您自己的资源定义的样式。 您无法通过这种方法继承
Android
内建样式。 要引用内建样式(例如TextAppearance
),您必须使用parent
属性。注意:当使用
parent
指定父style
之后,则前缀方式不再起作用。只是单纯的作为style
当名字。(可自行验证)
2 theme
2.1 什么是 theme?
theme
是作用于整个activity
或者Application
的style
。本质上也是style
。
2.2 用法
和style
本质上是一样的,只是作用域不一样。
我这里只是简单讲解了一下,网上有很多优秀的文章,专门讲解如何使用,我这里就不详细展开了。