Android学习之路(25) Theme和Style

1、官方详细解读

样式和主题背景  |  Android 开发者  |  Android Developers

2、应用场景

类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。

样式style :应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性

主题theme: 虽然他可以像style一样应用于某个view,但规范使用的话还是在整个app、 单独的activity 、某个视图层次结构layout

3、声明位置

样式style和主题theme在 res/values/ 中的样式资源文件中声明,该文件通常命名为 styles.xml。当然我们可以根据功能使用不同,多创建几个styles.xml。比如themes.xml,app_style.xml

4、使用区别

4.1 theme使用通常Android 资源分配语义名称

主题背景定义具名资源的集合,可由样式、布局、微件等引用。主题背景为 Android 资源分配语义名称,例如 colorPrimary

4.2 theme和style结合使用(推荐)

样式和主题背景应当配合使用。例如,您可以用一个样式指定按钮的一部分应为 colorPrimary 颜色,另一个部分应为 colorSecondary 颜色,而这些颜色的实际定义则在主题背景中提供。当设备进入夜间模式时,您的应用可以从“浅色”主题背景切换为“深色”主题背景,从而更改所有这些资源名称的值。您无需更改样式,因为样式使用的是语义名称而非具体的颜色定义。

4.3 样式style详细使用

4.3.1 样式style使用

    1. 应用于独立view上

style属性


    1. 应用于view及其所有子view上

android:theme

不过,您通常不会将样式应用于单个视图,而是会将样式作为主题应用于整个应用、Activity 或视图集合。

4.3.2 扩展和自定义样式style
  • 低级扩展方式

为保持与平台界面样式的兼容性,您应始终通过扩展框架或支持库中的现有样式来创建自己的样式。如需扩展样式,请使用 parent 属性指定要扩展的样式。然后,您可以替换继承的样式属性并添加新属性

例如


  • 推荐扩展方式

当然上述做法其实并不规范,官方建议我们直接继承 支持库中的样式(已定义好相关的style)。

不过,您应始终继承 Android 支持库中的核心应用样式。为与 Android 4.0(API 级别 14)及更高版本兼容,支持库中的样式会针对各版本中可用的界面属性进行优化。支持库中的样式通常与平台中的样式具有相似的名称,但包含 AppCompat

如需从库或您自己的项目继承样式,请声明父样式名称,但不要包含以上示例中所示的 @android:style/ 部分。例如,以下示例继承了支持库中的文本外观样式:


如果跟进下代码,会发现 父TextAppearance.AppCompat 中已经引用了 @android:style/TextAppearance

Android学习之路(25) Theme和Style_第1张图片

Android学习之路(25) Theme和Style_第2张图片

Android学习之路(25) Theme和Style_第3张图片

  • 进阶扩展方式(点分表示法)

可以参考官方 支持库中命名方式就是这样的

您也可以使用点分表示法(而非 parent 属性)来扩展样式名称,从而继承样式(平台中的样式除外)。也就是说,将您想继承的样式的名称附加在您的样式的名称前面并用句点分隔。这种方式通常仅适合用来扩展您自己的样式,而不适合用来扩展其他库中的样式。例如,以下样式从上面的 GreenText 样式继承了所有样式,然后增加了文本大小:


4.3.3 样式style优先级顺序

Android 提供了多种在整个 Android 应用中设置属性的方法。例如,您可以直接在布局中设置属性,将样式应用到视图,将主题背景应用到布局,以及以编程方式设置属性。

在选择如何为应用设置样式时,需考虑 Android 的样式层次结构。一般来说,您应当尽量使用主题背景和样式,以保持一致性。如果您在多个位置指定了相同的属性,下面的列表将决定最终应用哪些属性。该列表按照优先级从高到低的顺序排序:

  1. 通过文本 span 将字符或段落级样式应用到 TextView 派生的类
  2. 以编程方式应用属性
  3. 将单独的属性直接应用到 View
  4. 将样式应用到 View
  5. 默认样式
  6. 将主题背景应用到 View 集合、Activity 或整个应用
  7. 应用某些特定于 View 的样式,例如为 TextView 设置 TextAppearance

4.4 主题theme详细使用

4.4.1 主题颜色详解


 
 
 
 

  • 1. colorPrimary

App Bar 的背景色,即 ActionBar,通常也是一个 App 的主题色调。不过 ActionBar 已经退出历史舞台,由 Toolbar 代替使用,但是 Toolbar 需要在 layout 文件中单独使用 background 属性设置背景色

    1. colorPrimaryDark

status bar(状态栏)背景色。仅作用于 Lollipop 及更高版本。

    1. colorAccent

许多控件在选中状态或获取焦点状态下使用这个颜色,常见有:

CheckBox:checked 状态

RadioButton:checked 状态

SwitchCompat:checked 状态

EditText:获取焦点时的 underline 和 cursor 颜色

TextInputLayout:悬浮 label 字体颜色

  • 4 android:navigationBarColor

navigation bar 背景色。仅作用于 Lollipop 及更高版本。

  • 5 colorControlNormal

某些 Views “normal” 状态下的颜色,常见如:unselected CheckBox 和 RadioButton,失去焦点时的 EditText,Toolbar 溢出按钮颜色,等等。

  • 6 colorControlActivated

某种程度上,是 colorAccent 的替代者,比如对于 CheckBox 和 RadioButton 的 checked 状态,colorControlActivated 属性会覆盖 colorAccent 属性的对应颜色。

  • 7 colorControlHighlight

所有可点击 Views 触摸状态下的 Ripple(涟漪)效果。仅作用于 Lollipop 及更高版本。

  • 8 colorButtonNormal

Button normal 状态下的背景色。注意,这种设置与 Button 的 android:background 属性改变背景色不同的是,前者在 Lollipop 及更高版本上会让 Button 依旧保持阴影和 Ripple 触摸效果。

  • 9 android:windowBackground

窗口背景色,诸如此类的还有:android:background,android:colorBackground 等。

  • 10 android:textColorPrimary

EditText 的 text color,等等文本颜色。

  • 11 navigationIcon

定义toolbar上统一的返回按钮的图片

在Android界面上以上主题色对应使用位置下面两个图展示

Android学习之路(25) Theme和Style_第4张图片

Android学习之路(25) Theme和Style_第5张图片

4.4.2 theme主题大全

4.4.3 深入官方SDK不同版本查看主题定义明细

根据各自项目采用的SDK版本不同,主题可以也有不同之处。大概源码如下

Android学习之路(25) Theme和Style_第6张图片

Android学习之路(25) Theme和Style_第7张图片

你可能感兴趣的:(安卓,android,学习)