1 概念
1.1 style
Style是指一个关于组件或窗口的特定显示方式的属性集合,Style.xml资源文件与对应的layout.xml资源文件分开定义。Android中的style使用网页设计的级联方式,使得设计与内容分离。借助style可以完成Layout文件的简化,将layout的所有属性值放到一个名为XXX的style.xml文件中实现
1.2 theme
Theme是应用到整个Activity,甚至是APP的一种特定设计风格style,而不是仅仅用于某个View。一旦一个是style作为一个theme进行应用,那么意味着这个Activity或app上所有的View都将应用该style。
2 define styles
- 可以创建多个style文件,但位置必须位于工程目录
res/values/;文件名可以任意取,但必须为xml扩展名
- XXX.xml的style文件的根节点必须为<resources>
- <style>节点必须实现name节点,name值必须能够唯一标识该style文件
- <item>作为<style>的子节点存在,定义View或window的属性值,item的name指定该View属性的名称,型如:<item name="style property">value</item>其中value可以字符串、16进制颜色值、另外一个资源的引用,等等,都是根据具体的View属性来定
(继承了名为TextAppearance style的Medium属性)
- <resources>的每个<style>节点都会根据style的name属性值在编译时是转化到application的资源中去
- <style>节点的parent属性是可选的,表明该style需要从对应的style文件中继承特定的资源。你也可以覆盖该继承资源
- style文件可以用来定义某个view或者整个Activity,甚至是整个app的显示风格
3 继承style文件
3.1 用parent属性
parent属性能够完成一个style对于一个已存在(自定义或平台内置)的style,让后根据需要对父style的属性进行添删改,形成需要的style文件
(继承了名为TextAppearance的style所有属性)
3.2 用前缀表示法
- 如果你需要继承的style名为 parentStyleName,则可以将该style命名为parentStyleName.xxx表示该style继承于上一个style
- 此方法可以继承多个style,链式继承
- 注意:此方法只能用于自定义的style,不能用于平台内置style
4 style的属性
- style属性均来源于View的属性值,View的属性值可以直接在layout文件中定义,也可以抽离出来,统一在style中定义,在layout中引用,对于大量界面时,可以精简代码
- 不同View所有的属性不完全一样,如果View所引用的style中存在其不支持的属性,则该View应用其支持属性,忽略不支持属性
- 存在一些属性不应用于任何View,只是应用于Activity/Application,这些属性都是window开头
5 应用style或theme到UI界面
3.1 应用style到单个View
引用style在layout文件中,对于ViewGroup该style也只能作用于ViewGroup本身,不能够用于ViewGroup中的子组件
3.2 应用style到Activity或者App
- 一旦Activity或者app中引用style作为主题,那么该Activity或app中所有组件豆将遵循该style,只要View支持对应的属性都将应用,忽略不支持属性
- Activity与app均在
AndroidManifest.xml中定义
用内置theme
用自定义Theme
注意:color作为一个单独的资源存在,原因是windowBackground的值只能支持引用方式,而不能再item中直接给出颜色值