Android——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属性
- 2. 应用于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
- 进阶扩展方式(点分表示法)
可以参考官方 支持库中命名方式就是这样的
您也可以使用点分表示法(而非 parent
属性)来扩展样式名称,从而继承样式(平台中的样式除外)。也就是说,将您想继承的样式的名称附加在您的样式的名称前面并用句点分隔。这种方式通常仅适合用来扩展您自己的样式,而不适合用来扩展其他库中的样式。例如,以下样式从上面的 GreenText
样式继承了所有样式,然后增加了文本大小:
4.3.3 样式style优先级顺序
Android 提供了多种在整个 Android 应用中设置属性的方法。例如,您可以直接在布局中设置属性,将样式应用到视图,将主题背景应用到布局,以及以编程方式设置属性。
在选择如何为应用设置样式时,需考虑 Android 的样式层次结构。一般来说,您应当尽量使用主题背景和样式,以保持一致性。如果您在多个位置指定了相同的属性,下面的列表将决定最终应用哪些属性。该列表按照优先级从高到低的顺序排序:
- 通过文本 span 将字符或段落级样式应用到
TextView
派生的类 - 以编程方式应用属性
- 将单独的属性直接应用到 View
- 将样式应用到 View
- 默认样式
- 将主题背景应用到 View 集合、Activity 或整个应用
- 应用某些特定于 View 的样式,例如为
TextView
设置TextAppearance
4.4 主题theme详细使用
4.4.1 主题颜色详解
- 1. colorPrimary
App Bar 的背景色,即 ActionBar,通常也是一个 App 的主题色调。不过 ActionBar 已经退出历史舞台,由 Toolbar 代替使用,但是 Toolbar 需要在 layout 文件中单独使用 background 属性设置背景色
- 2. colorPrimaryDark
status bar(状态栏)背景色。仅作用于 Lollipop 及更高版本。
- 3. 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界面上以上主题色对应使用位置下面两个图展示
4.4.2 theme主题大全
4.4.3 深入官方SDK不同版本查看主题定义明细
根据各自项目采用的SDK版本不同,主题可以也有不同之处。大概源码如下
来源地址:https://blog.csdn.net/yilvqingtai/article/details/128065726
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341