主题与风格 第3节 主题-theme

第3节 主题-theme

主题theme由具备各种风格style的组件组合起来的。如果说style关注的是具体某个控件,那么theme就关注的是整体宏观的方面,例如一个Activity或者一个应用整体。

3.1 theme的定义

theme的定义与style的定义完全一样,一样的标签、一样的写法,

  1. res\values目录下,新建一个themes.xml文件(如果使用styles.xml文件)也可以;
  2. 在新建的文件中,使用style标签,在标签中为定义的主题取个名字,例如name="Mytheme"
  3. 在style标签内部,使用item标签,为需要定制的属性设置新的值;

3.2 theme的继承

theme的继承与style的继承完全一样
theme也可以从已有的theme继承而来。
theme与style一样,有两种继承方式,一种是显式继承,一种是隐式继承。

3.2.1 显示继承

  1. 继承已有的theme时,使用parent=属性,
  2. 在子theme中,定义需要扩展或者需要覆盖的属性,

3.2.2 隐式继承

  1. 继承已有的theme,给新theme以.为分隔符取名,例如"MyTheme.ExMyTheme,被继承的theme名称要放在前面;
  2. 子theme中,定义需要扩展或者需要覆盖的属性,

3.3 theme的使用

theme常用在两种地方,一个是应用,一个是Activity。

3.3.1 应用使用theme

  1. 配置文件中设置:在项目工程的AndroidManifest.xml文件中,application标签的android:theme属性,就用来指定整个应用的theme

  2. java源码中设置:当应用被创建的时候,在ApplicationonCreate()函数中设置,

3.3.2 Activity使用theme

  1. 配置文件中设置:在项目工程的AndroidManifest.xml文件中,标签的android:theme属性,就用来指定该Activity的theme

  2. java源码中设置:当应用被创建的时候,在ActivityonCreate()函数中设置,

3.4 属性值的设置

在对属性值设置时,可以使用三种方式,前两种已经在style的相关章节介绍了,下面介绍?引用。

这种引用并不直接设置值,而是表明希望设置的值与“另一个属性”的值相同;这“另一个属性”定义在当前使用的主题当中,例如,

  1. 创建自定义属性myAttr:在res\values目录下创建一个attrs.xml文件,添加一个自定义属性myAttr

  2. 定义一个theme-MyTheme,设置myAttr的值,

  3. 让这个应用使用MyTheme,作为应用的主题(当然也可以指定某个具体的Activity使用这个主题),

  4. 定义一个style-MyStyle,使用myAttr来指定按钮文字的颜色,

  5. 为布局文件中的一个Button使用MyStyle

这样,Button显示的文字颜色就是MyThememyAttr指定的颜色了。

3.5 theme可用的各种属性

theme可以设置的属性很多,可以参考安卓的系统源码themes.xml themes_device_defaults.xml themes_material.xml themes_holo.xml等,里面使用了很多定义主题时用到的属性。

不过里面有的属性是不对应用层开放的,在应用层使用的这些属性的时候,如果遇到编译错误,那么多半就是这个原因。

系统主题的属性很多,我们将选择性的介绍一些重要属性的用法和效果。

3.5.1 调色板属性

调色板属性是主题最为重要的属性,它决定了主题的配色。这些属性包括,

  1. android:colorPrimaryDark
  2. android:colorPrimary
  3. android:colorAccent
  4. android:colorEdgeEffect
  5. android:colorControlNormal
  6. android:colorControlActivated
  7. android:colorControlHighlight
  8. android:colorButtonNormal
  9. android:colorSwitchThumbNormal

如果一款应用设计了自己的配色方案,那么修改这些属性,会让开发的效率大大提高。

例如colorAccent就被很多控件利用?访问的方式使用到,一旦修改了它,很多控件的配色也就跟着变化了。例如,我们将该属性的值设置成绿色,

其它属性也对应着修改界面控件的某些颜色,由于它们都是和主题配色相关的属性,所以称它们为调色板属性。

3.5.2 导航栏、状态栏属性

从安卓5.0起,Android SDK加入了对导航栏和状态栏颜色的设定属性,

  1. 导航栏:android:navigationBarColor
  2. 状态栏:android:statusBarColor

3.6 系统主题

安卓系统内置了很多种主题,它们各有各的特点,也具有很多共同的性质。

按照设计思路,分成三个大类:

  1. theme:这是安卓系统刚诞生时使用的界面元素设计理念,具有暗色和亮色两种风格;

  2. Holo:这是安卓系统3.0时开始使用的界面元素设计理念,具有暗色和亮色两种风格;

  3. Material:这是安卓系统5.0时开始使用的界面元素设计理念,具有暗色和亮色两种风格;

以上三个大类下面还有很多主题,可以通过Android Studio提供的preview工具看到这些主题。

  1. 打开任意一个布局文件,例如activity_main.xml;
  2. 点击预览窗口上红色方框对应的图标,会弹出一个Select Theme窗口;

这里分门别类的列举出了所有可用的系统内置的主题。

最后需要特别的指出一个类型的主题:device default
它并不是除了theme holo material之外的第四类,而是为了安卓系统在不同版本上的兼容性而采取的兼容方案。

可以简单的认为,当使用这种主题的应用在安卓3.0~安卓5.0之间的版本上运行时,它使用的主题就是holo;当使用这种主题的应用在安卓5.0以上的版本,它使用的主题就是material


/**************************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。
/
**************************************************************************/