内容正文:
第6章 样式和主题
Android Studio 移动应用开发基础(第 2 版)
目录
6.1 样式入门
6.2 定义样式
6.3 应用样式
6.4 使用 Android 平台已定义的样式和主题
6.5 Android 应用程序的主题结构分析
6.6 同步练习
6.1 样式入门
在进行 Android 应用程序的界面设计时,经常需要对界面及界面中的组件设置统一的显示外观,如界面的背景颜色、文本字号、文本颜色、组件的显示大小、是否显示标题栏等;
可以为每个组件设置自己的显示属性,但是为了便于对外观进行统一管理,需要将这些外观设置集
中起来。Android 是通过样式(Style)完成这项工作的;
举例说明 Android 是如何定义样式及将定义好的样式应用于界面中的。新建一个名为 Ch0601 的 Android 应用程序工程,然后修改布局文件 res/layout/ activity_main.xml 中的代码:
res/values/strings.xml 文件中的代码:
下面修改 Button 组件和 TextView 组件的样式。在工程的 res/values 目录下,新建一个名为 mystyles.xml 的文件,修改该文件中的代码:
修改 res/layout/activity_main.xml文件中的代码:
6.2 定义样式
要定义一个样式,可以在工程的 res/values 目录下新建一个 XML 文件,也可以在现有的某个文件中(如 styles.xml 文件)直接添加要定义的样式
6.2.1 定义样式的一般格式
定义样式的一般格式如下:
在 Java 文件中,以“R.style.定义样式名称”的格式访问定义的样式,在 XML 文件中,以“@style/自定义样式名称”的格式访问定义的样式。需要注意的是,在定义样式时,parent属性是可选属性,parent="父样式名称"表示定义的样式是支持继承的,这种样式是级联样式。
下面来看一个定义样式的案例:
通过继承定义新的样式:
6.2.2 样式定义中的可用属性
样式的应用目标不同,样式定义中的可用属性也有所不同。例如,定义一个针对 TextView组件的样式和一个针对 Button 组件的样式,这两个样式定义中的可用属性是不同的。因此,应该针对样式的应用目标、参考组件的可用 XML 配置属性,确定样式定义中的可用属性。但有一种例外,如果将某个样式应用于某个组件上,而在该样式定义中包含该组件不支持的属性,那么该组件会自动忽略这个不支持的属性,不会影响其他支持的属性所起的作用;
可以参考 Android 帮助文档中的android.R.styleable 类,在该类中对每个 Android 组件都给出了其样式定义中的可用属性;
6.3 应用样式
在完成样式定义后,可以将样式应用于某个组件上,也可以将样式应用于某个 Activity 或整个 Application 上。
6.3.1 将样式应用于某个组件上
将定义好的样式应用于某个组件上是一项非常简单的工作,在组件的配置中添加 styleXML配置属性即可;
可以将样式应用于具体组件上,也可以将样式应用于容器组件上。需要注意的是,应用于
容器组件上的样式只对容器组件本身有效,对放置于该容器组件中的子组件是不起作用的。
6.3.2 将样式应用于某个 Activity 或整个 Application 上
将样式应用于某个 Activity 或整个 Application 上时,这个样式就成为了主题。
定义一个样式,代码如下:
然后将这个样式应用于某个 Activity 上,代码如下:
<activity android:theme="@style/CustomTheme">
或者将这个样式应用于整个 Application 上,代码如下:
<application android:theme="@style/CustomTheme">
6.4 使用 Android 平台已定义的样式和主题
Android 平台预定义了一系列的样式和主题,以供应用程序使用。在定义的所有样式中,以 Theme 开头的样式是主题,不是以 Theme 开头的样式是普通样式。
对于 Android 中完整的样式定义,读者可以参考 Android 帮助文档中的 android.R.style 类。要使用 Android 平台已定义的样式或主题,需要将样式或主题名中的下画线“_”替换为小数点“.”。
6.5 Android 应用程序的主题结构分析
在 Android Studio 中新建 Android 应用程序工程时,Android 已经在AndroidManifest.xml 文件中为该 Android 应用程